Java 如何公开和@EmbeddedId的字段
我有一个Java 如何公开和@EmbeddedId的字段,java,hibernate,jpa,lombok,Java,Hibernate,Jpa,Lombok,我有一个@实体,有三个字段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 {
@实体
,有三个字段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
(或者任何@Embedded
)的话,实现这一点的唯一方法(我知道)是编写临时getter和setter,绕过Id变量,例如
@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
}
这看起来像是许多要编写和维护的样板代码
是否有用于公开
@EmbeddedId
getter和setter的注释?在MyClass中,将Lombok@Delegate
注释添加到PrimaryKey中。它应该是这样的:
@Entity
@Data
public class MyClass {
@Delegate
@EmbeddedId
private PrimaryKey id;
}
然后可以直接从MyClass设置/获取PrimaryKey字段。是一个供您阅读更多信息的链接。您可以将AccessLevel与@Getter和@Setter一起使用,如下所示:
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private PrimaryKey id;
当使用@Data时,默认情况下您可以公开访问访问器,并且使用AccessLevel.NONE将覆盖默认行为,并且不允许访问器。我的问题与直接从MyClass代理访问PrimaryKey字段有关,但如果需要,这仍然是隐藏PrimaryKey的好方法。应与@Delegate一起使用,如下一个回答中所指出的,正如报告的注释现在标记为实验性的,并且在将来的版本中可能会删除支持。