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一起使用,如下一个回答中所指出的,正如报告的注释现在标记为实验性的,并且在将来的版本中可能会删除支持。