我想使用 hibernate
创建一个复合主键
。通常我会选择@IdClass
。
但是这次我想在复合主键中也使用外键
。
问题:这可能吗?
示例:
@Entity
class Person {
long id;
}
class CarPK implements Serializable {
private int code;
private String name;
public CarPK(int code, String name) {
this.code = code;
this.name = name;
}
}
@Entity
@IdClass(CarPK.class)
class Car {
@Id
private int code;
@Id
private String name;
//can I also mark "person.id" with @Id?
@ManyToOne
@JoinColumn(name = "fk_person_id", foreignKey = @ForeignKey(name = "fk_person"))
private Person person; //assume car is shared
}
人员引用将在数据库中显示为fk_person_id
。是否也可以将此列添加到 car
表的 主键
中?
所以我会得到类似于:CONSTRAINT car_pkey PRIMARY KEY (code, name, fk_person_id)
?
更新:
@ManyToOne
@JoinColumn(name = "id")
private Person person;
结果:在实体path.to$Car: id中找不到@IdClass的属性
最佳答案
是的,您可以将@Id
添加到连接列,但您必须使用IdClass
中的键类型。我在当前的项目中正在做完全相同的事情。
@Entity
@IdClass(MyIdClass.class)
public class MyObject {
@Id
private String key;
@Column
@Lob
private String value;
@ManyToOne(cascade = CascadeType.PERSIST)
@Id
@JoinColumn(name = "id")
private MyOtherObject otherObject;
...
和
public class MyIdClass implements Serializable {
private long otherObject;
private String key;
...
在这种情况下,MyOtherObject.id
是一个long
。
关于java - 如何在复合主键中使用外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34019617/