英文:
Composite keys using IdClass on Hibernate for composite keys when using DataJpaTest
问题
以下是翻译好的内容:
我有一个类似这样的 JPA 类:
@Data
@Entity
@Table(name = "oss_org_discount")
@IdClass(OrganizationDiscountPK.class)
public class OrganizationDiscount {
@Id
@OneToOne(fetch = FetchType.LAZY)
@EqualsAndHashCode.Exclude
@JoinColumn(name = "Org")
@ToString.Exclude
private Organization organization;
@EqualsAndHashCode.Include
@ToString.Include
private String getOrganizationId() {
return organization.getId();
}
@Id
@Column(name = "Discount")
private String discountId;
private String active;
@Contract(pure = true)
public boolean isActive() {
return "Y".equals(active);
}
public void setActive(final boolean active) {
this.active = active ? "Y" : "";
}
}
还有一个 IdClass。
@Data
public class OrganizationDiscountPK implements Serializable {
private Organization organization;
private String discountId;
}
当我查看日志时,我看到以下生成的内容。
Hibernate:alter table oss_org_discount add constraint UK_ecc64ehkc31t6kf0hcdwj1tvi unique (org)
我的问题是,它不应该显示类似这样的内容吗?
Hibernate:alter table oss_org_discount add constraint UK_ecc64ehkc31t6kf0hcdwj1tvi unique (org, discount)
不确定这是否是我部分的错误还是 Hibernate 中的一个 bug。
不过,我确实看到了这个...
Hibernate:create table oss_org_discount (discount varchar(255) not null, active varchar(255), org varchar(255) not null, primary key (discount, org))
所以另一个问题就是为什么会创建一个唯一约束?
英文:
I have JPA class like this
@Data
@Entity
@Table(name = "oss_org_discount")
@IdClass(OrganizationDiscountPK.class)
public class OrganizationDiscount {
@Id
@OneToOne(fetch = FetchType.LAZY)
@EqualsAndHashCode.Exclude
@JoinColumn(name = "Org")
@ToString.Exclude
private Organization organization;
@EqualsAndHashCode.Include
@ToString.Include
private String getOrganizationId() {
return organization.getId();
}
@Id
@Column(name = "Discount")
private String discountId;
private String active;
@Contract(pure = true)
public boolean isActive() {
return "Y".equals(active);
}
public void setActive(final boolean active) {
this.active = active ? "Y":"";
}
}
And a IdClass.
@Data
public class OrganizationDiscountPK implements Serializable {
private Organization organization;
private String discountId;
}
When I view the logs I see the following generated.
Hibernate: alter table oss_org_discount add constraint UK_ecc64ehkc31t6kf0hcdwj1tvi unique (org)
My question is, shouldn't it show something like
Hibernate: alter table oss_org_discount add constraint UK_ecc64ehkc31t6kf0hcdwj1tvi unique (org, discount)
Not sure if it is an error in my part or a bug in Hibernate.
I do see this though...
Hibernate: create table oss_org_discount (discount varchar(255) not null, active varchar(255), org varchar(255) not null, primary key (discount, org))
So another question would be why would a unique constraint be created?
答案1
得分: 0
问题出在 Organization
上的 OneToOne
关系。应该改为 @ManyToOne
。
英文:
The issue was the OneToOne
on the Organization
. It should be @ManyToOne
专注分享java语言的经验与见解,让所有开发者获益!
评论