Hibernate 在 JoinTable (List<>) 中声明复合主键
如何使用 HQL(Hibernate 查询语言)在副表中声明复合主键?以前我在我的类(class)中声明了一个可连接的并且一切正常,它创建了一个两列的复合主键。这是我使用的代码:
之前(工作)
@Id
@SequenceGenerator(name="someSequence", sequenceName="SEQ_APP", allocationSize =1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="appSequence")
@Column(name="id")
private int setting_id;
@OneToOne
private User user;
@ManyToMany
@JoinTable(
name="tbl_settings_objectproxy",
joinColumns = @JoinColumn(name = "id"),
inverseJoinColumns = @JoinColumn( name = "objectproxy_id")
)
private Set<SomeObject> objectproxy;
现在我整理了所有内容,将 Set 更改为 List 并添加了另一个边表。现在 hibernate 按预期创建了两个边表,但它没有声明任何主键……有人知道如何解决这个问题吗?这是我的新代码:
AFTER(不再创建复合主键,甚至不声明任何主键)
@Id
@SequenceGenerator(name="someSequence", sequenceName="SEQ_APP", allocationSize =1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="appSequence")
@Column(name="id")
private int setting_id;
@OneToOne
private User user;
@ManyToMany
@JoinTable(
name="tbl_settings_objectproxy",
joinColumns = @JoinColumn(name = "id"),
inverseJoinColumns = @JoinColumn( name = "objectproxy_id")
)
private List<SomeObject> objectProxyForSomething;
最佳答案
答案/解决方案:
Change the List<> to a Set<> 将在这种情况下发挥所有魔力。
您可以使用 HQL 手动创建表。
- 如果您坚持使用 List,我只知道一种方法 使用“columnDefinition”声明(单个)主键 您可以将两列都设置为通过 使用“@UniqueConstraint”注释设置唯一约束 像这样:
@ManyToMany
@JoinTable(
name="tbl_settings_objectproxy_for_something",
joinColumns = @JoinColumn(name = "id", columnDefinition = "int primary key"),
inverseJoinColumns = @JoinColumn( name = "objectproxy_id")
uniqueConstraints = {@UniqueConstraint(columnNames={"id", "objectproxy_id"})}
)
private List<SomeObject> SomeObjectProxy;
投票支持 JB Nizet 的评论,因为这些是他的解决方案,但他在评论而不是答案中给出了它们。
关于java - Hibernate 在 JoinTable (List<>) 中声明复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832865/