我有一个包含三列的表格,“A”、“B”和“C”。其中两列(A 和 B)是该表的复合主键。我已经为这个表编写了一个 Java 类,我正在使用 Hibernate 将类中的数据映射到表中的数据。我为嵌入式(即复合)键创建了另一个类。
这两个类看起来像这样:
@Entity
@Table(name="SOME_TABLE", schema="SOME_SCHEMA")
public class Outer {
private Key key;
private String a;
private String b;
private String c;
@EmbeddedId
public Key getId() {
return this.key;
}
// Also a setter for Key...
@Column(name="A")
public String getA() {
return this.a;
}
public void setA(final String a) {
this.a = a;
}
// Also setters and getters for B and C.
}
.
@Embeddable
public class Key {
private String a;
private String b;
@Column(name="A")
public String getA() {
return this.a;
}
public void setA(final String a) {
this.a = a;
}
// Also a getter & setter for B.
}
似乎所有 Hibernate 文档都掩盖了 getter 和 setter 应该放在哪里。 Outer 和 Key 都应该为构成复合键的值设置 setter 吗?如果我在两个地方都有一个 setter,如果我在 Outer 上设置 A 的值,Hibernate 是否会做正确的事情(即在 Key 上设置值)? Outer.getA/B() 和 Outer.setA/B() 应该服从 Key 类吗?
我认为为同一数据在两个地方使用 setter 是一种糟糕的编码习惯。至少是模棱两可的。我希望 Hibernate 会为我设置 Key 类的值,但我想确定。谢谢!
-乔
最佳答案
我不是 100% 确定 @EmbeddedId
但我认为它必须以与常规 @Embedded
属性相同的方式处理,所以我认为映射应该像这个:
@Entity
@Table(name="SOME_TABLE", schema="SOME_SCHEMA")
public class Outer {
private Key key;
// no fields a and b here
private String c;
@EmbeddedId
public Key getId() {
return this.key;
}
// Also a setter for Key...
@Transient
public String getA() {
return this.key.getA();
}
public void setA(final String a) {
this.key.setA(a);
}
@Transient
public String getB() {
return this.key.getB();
}
public void setB(final String b) {
this.key.setB(b);
}
// Also setters and getters for C.
}
关于java - Hibernate:getters/setters 与 EmbeddedIds 重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423882/