如何公开和@EmbeddedId的字段

时间:2018-05-02 09:29:26

标签: java hibernate jpa lombok

我有一个@Entity,其中有三个字段A,B,C,其中A和B充当复合主键。我创建了一个包含A和B的@EmbeddedId类。为了减轻定义getter和setter的负担,我使用了lombok @Data注释。

@Entity
@Data
public class MyClass {
    @EmbeddedId
    private PrimaryKey id;
}

@Embeddable
@Data
public class PrimareyKey implements Serializable {
    private String A;
    private String B;
}

我不想公开A和B是主键并访问A并以相同的方式访问所有字段。

//Exposes primary key
myObject.getid().getA();
myObject.getid().getB();
myObject.getC();

//Hides primary key
myObject.getA();
myObject.getB();
myObject.getC();

目前可以使用@IdClass@Id标记为@EmbeddedId作为suggested in this answer,但如果我仍然需要使用@Embedded(或任何@Entity @Data public class MyClass { @EmbeddedId private PrimaryKey id; public String A getA(){ return id.getA() } public String A setA(String a){ id.setA(a); } //same for B and any other fiels in PrimaryKey } 实际上)唯一的方法(我知道)实现这一点就是编写绕过id变量的ad hoc getter和setter,例如

@EmbeddedId

这看起来像要编写和维护的许多样板代码。

是否有注释来公开serialize getter和setter?

2 个答案:

答案 0 :(得分:1)

在MyClass中,将Lombok @Delegate注释添加到PrimaryKey。它应该看起来像:

@Entity
@Data
public class MyClass {
    @Delegate
    @EmbeddedId
    private PrimaryKey id;
}

然后您可以直接从MyClass设置/获取PrimaryKey字段。 Here是一个链接,供您详细了解。

答案 1 :(得分:1)

您可以将AccessLevel与@Getter和@Setter一起使用,如下所示:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private PrimaryKey id;

使用@Data时,默认情况下您可以公开访问访问者,并且使用AccessLevel.NONE将覆盖默认行为,并且不允许访问访问者。