我有一个@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?
答案 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将覆盖默认行为,并且不允许访问访问者。