Estoy migrando algunas clases en un archivo Hibernate hbm.xml a las anotaciones JPA.Excluir campos de las propiedades @Embedded caso por caso con Hibernate/JPA
Tenemos una clase incrustable Address
que se utiliza en varios lugares. Cada lugar usa un subconjunto diferente de las propiedades en Dirección.
(getters/setters omitidos por razones de brevedad)
@Embeddable
public class Address {
String email;
String address;
String city;
String state;
String zip;
String country;
}
@Entity
@Table(name="customer")
public class Customer {
@Embedded
@AttributeOverrides({
@AttributeOverride(name="address", [email protected](name="ship_addr"),
@AttributeOverride(name="city", [email protected](name="ship_city"),
@AttributeOverride(name="state", [email protected](name="ship_state"),
@AttributeOverride(name="zip", [email protected](name="ship_zip"),
@AttributeOverride(name="country", [email protected](name="ship_country")
})
Address shippingAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="address", [email protected](name="bill_addr"),
@AttributeOverride(name="city", [email protected](name="bill_city"),
@AttributeOverride(name="state", [email protected](name="bill_state"),
@AttributeOverride(name="zip", [email protected](name="bill_zip")
})
Address billingAddress;
}
Tenga en cuenta que en este ejemplo artificial, shippingAddress utiliza Address.country, pero billingAddress no lo hace; y ninguno de ellos usa Address.email.
El problema es que Hibernate está infiriendo @Column
etiquetas para cualquier columna en la que no haya proporcionado explícitamente una.
He intentado añadir @Transient
a todos los campos Address
, pero parece que no lo hace de triunfo @AttributeOverride
@Transient
.
¿Hay alguna solución para esto?
El problema es que esta es una clase de modelo común utilizada en toda nuestra organización. Estoy buscando una forma de migrar esta clase a JPA sin cambiar el comportamiento, o forzar a 30 equipos diferentes a ajustar su código. – qualidafial
Tenga en cuenta también que este es un problema con el cambio de la opción de exclusión voluntaria de JPA utilizando &at; Transitorio, en lugar de optar por la columna &at;. La idea era hacer que la adopción de JPA fuera menos invasiva al no requerir &at; Anotaciones de columna en todas partes; esto es solo un efecto secundario que nos ha picado y ha hecho imposible migrar esta clase desde la configuración XML heredada a las anotaciones JPA. – qualidafial
Si no puede cambiar su modelo, entonces no veo una solución. Simplemente tendrá que ignorar las propiedades de la dirección que no se utilizan, y así dejarlas en blanco en la base de datos. Solución sucia, pero la menos invasiva. –