有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate:与EmbeddedID重复的getter/setter?

我有一张有三列的表,“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应该去哪里。外部键和键是否都应该为组成复合键的值设置设置器?如果我在这两个地方都有一个setter,那么如果我在外部设置了一个值,Hibernate是否做了正确的事情(即在键上设置值)?应该在外面。getA/B()和外部。setA/B()是否遵从密钥类

我认为在两个地方为相同的数据设置setter是不好的编码实践。至少是模棱两可的。我希望Hibernate能为我设置Key类的值,但我想确定一下。谢谢

-乔


共 (1) 个答案

  1. # 1 楼答案

    我对@EmbeddedId不是100%确定,但我认为它必须以与常规@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.
    }