gpt4 book ai didi

java - JPA 复合主键

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:23:50 29 4
gpt4 key购买 nike

<分区>

我的 JPA 模型中有以下类(省略了 getter、setter 和不相关的字段):

@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;
}

我需要定义一个类Price,这样当DDL is generated from the classes ,对应表的主键由ProductCurrency键组成。我尝试了以下方法:

@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;
}

但这会为 PRICE 表生成以下内容:

create table PRICE (
currency_id int null,
product_id int null,
primary key (currency_id, product_id)
);

注意 currency_idproduct_id 都可以为空,当我尝试将 DDL 加载到 SQL Server 中时会导致以下错误

Cannot define PRIMARY KEY constraint on nullable column in table 'PRICE'

我不明白为什么这些是可以为空的,因为在域模型中它们被注释了@ManyToOne(optional = false)

DDL 是使用 org.hibernate.dialect.SQLServerDialect SQL 方言生成的。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com