conflicto Hibernate @Entity con Spring @Autowired para objeto no columna

Roland Roberts:

Tengo una tabla que contiene descripciones de los artículos. Los productos que tienen un historial de precios que puede ser muy extensa. Es que el último bit que me lleva a evitar el uso de una combinación de uno-a-muchos de mapeo de Hibernate normal con carga diferida. Piense un historial de precios como garrapatas en una bolsa de valores, un montón de historia.

Así que tengo una memoria caché que funciona bien, está todo conectado con la primavera, se inyecta el DAO, la caché se administra lo que necesita ser consultada vs lo que ya sabe.

Por lo tanto, lo "natural" es ser capaz de pedir un artículo sobre el tema de la historia de precios. Aquí hay un código, que es una versión adelgazado de lo real:

@Entity @Table(name="item")
public class Item {
    @Id
    @Column(name="id")
    private long id;
    @Column(name="name")
    private String name;

    @Autowired
    private PriceCache priceCache;

    /* ...setters, getters for id, name ... */

    public NavigableMap<LocalDateTime,SecurityValue> getPrices(LocalDateTime begTime, LocalDateTime endTime) {
        return priceCache.get(id, begTime, endTime);
    }
}

Mi versión original utiliza todos los métodos estáticos con PriceCache; Quiero pasar a utilizar un bean inyectada en parte porque significará que puedo reescribir la memoria caché como una implementación de una interfaz que hace que sea más fácil de configurar las pruebas unitarias para algunos bits que no están en el ejemplo; Puedo crear un objeto de caché de prueba que suministra mi historial de precios de cualquier modo que necesito la prueba sin tener que ir a la base de datos.

El problema es que cuando la primavera e Hibernate escanear los paquetes, que parecen entrar en conflicto sobre qué hacer con ese campo @Autowired; Me sale el siguiente con un poco de formato para facilitar la lectura); dbEMF es mi EntityManagerFactory:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException:
   Error creating bean with name 'dbEMF' defined in class path resource [applicationContext.xml]:
     Invocation of init method failed;
   nested exception is javax.persistence.PersistenceException:
     [PersistenceUnit: default] Unable to build Hibernate SessionFactory;
   nested exception is org.hibernate.MappingException:
     Could not determine type for: com.example.cache.PriceCache, at table: item, for columns: [org.hibernate.mapping.Column(priceCache)]

Una vez más, el código y el trabajo bien caché de base, siempre utilizo sólo métodos estáticos con el PriceCache, donde se crea como un conjunto unitario "manualmente". Convirtiéndola en la primavera dejó manejar la creación y en otros lugares de la inyección funciona bien, también. Es sólo cuando tengo esta mezcla de hibernación y la primavera que me encuentro con un problema.

No he tratado de volver a utilizar un archivo XML externo de la configuración de hibernación que podría resolver el problema, o no ir.

¿Hay una manera de decir esto es que Hibernate no una columna? O hay un patrón diferente que debería estar siguiendo a hacer este tipo de cosas, tal vez algún tipo de proxy para los objetos artículo?

Nir Levy:

puede utilizar @Transientanotación, para indicar que no debe persistir en la base de datos.

En términos generales, creo que si se trata de una entidad, que no debe tener ningún caché autowired que no forma parte de ella, pero eso es una historia diferente

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373092&siteId=1
Recomendado
Clasificación