Mam następujące klasy w moim modelu JPA (pobierające, ustawiaczy i pola nieistotne pominięta):JPA kompozytowa klucz podstawowy
@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;
}
muszę zdefiniować klasę Price
tak, że gdy DDL is generated from the classes, podstawowym klucz odpowiedniej tabeli składa się z kluczy dla Product
i Currency
. Próbowałem następujące:
@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;
}
Ale to generuje następujące po PRICE
tabeli:
create table PRICE (
currency_id int null,
product_id int null,
primary key (currency_id, product_id)
);
Zauważ, że zarówno currency_id
i product_id
są pustych, co powoduje następujący błąd przy próbie załadowania DDL do SQL Server
nie można zdefiniować klucz podstawowy o wartości pustych kolumny w tabeli „cena”
Nie rozumiem, dlaczego są pustych, ponieważ w modelu domeny są one opatrzone @ManyToOne(optional = false)
DDL są generowane przy użyciu dialektu org.hibernate.dialect.SQLServerDialect
SQL.
Próbowałem swoje sugestie, ale to nie robi żadnej różnicy –
Chciałbyś spróbować użyć metoda '@ EmbeddedId'? –
To też nie działa niestety –