java - Hibernate:getters/setters 与 EmbeddedIds 重复?

标签 java hibernate orm composite-key embeddable

我有一个包含三列的表格,“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/

相关文章:

java - 空闲固定线程池的缺点

java - hibernate : Not allowing cascaded delete because of Foreign key violations

java - Play Framework JPA - 找不到实体

java - MyBatis:Sybase 存储过程返回零行

orm - 多个外部连接条件 LLBLGen

java - java中的静态方法加载/卸载和内存区域?

java - 用于数据库代码的 JUnit

java - 如何检查空的二维数组?

java - 从 tomcat 8 迁移到 jetty 服务器

.net - 哪个ORM BLToolkit不受欢迎?