He las siguientes clases en mi modelo de APP (getters, setters, y campos irrelevantes omitidas):APP primario compuesto clave
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Currency {
@Id
private Integer ix;
}
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Product {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
}
tengo que definir una clase Price
, de tal manera que cuando el DDL is generated from the classes, la primaria la clave de la tabla correspondiente se compone de las claves para Product
y Currency
. He intentado lo siguiente:
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@IdClass(PricePK.class)
public class Price {
@Id @ManyToOne(optional = false)
private Product product;
@Id
@ManyToOne(optional = false)
private Currency currency;
}
@Embeddable
public class PricePK implements Serializable {
Integer product;
Integer currency;
}
Pero esto genera los siguientes para la tabla PRICE
:
create table PRICE (
currency_id int null,
product_id int null,
primary key (currency_id, product_id)
);
en cuenta que tanto currency_id
y product_id
son anulable, lo que provoca el siguiente error cuando intento cargar el DDL en SQL Server
no se puede definir la restricción PRIMARY KEY en la columna anulable en la tabla 'precio'
No entiendo por qué son anulable, ya que en el modelo de dominio que se anotan @ManyToOne(optional = false)
El DDL se genera utilizando el dialecto SQL org.hibernate.dialect.SQLServerDialect
.
Probé su sugerencia, pero no hace ninguna diferencia –
¿Le gustaría probar usando el método '@ EmbeddedId'? –
Desafortunadamente no funcionó –