如何公开和@EmbeddedId 的字段
How to expose fields of and @EmbeddedId
我有一个 @Entity
,其中包含三个字段 A、B、C,其中 A 和 B 充当复合主键。我创建了一个 @EmbeddedId
class 来保存 A 和 B。为了减轻定义 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
实际上) 实现此目的的唯一方法(我知道)是编写绕过 id 变量的临时 getter 和 setter,例如
@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
注释添加到您的主键。它应该看起来像:
@Entity
@Data
public class MyClass {
@Delegate
@EmbeddedId
private PrimaryKey id;
}
然后您可以 set/get 直接从 MyClass 中获取主键字段。 Here 是一个 link 供您阅读更多相关信息。
您可以使用 @Getter 和 @Setter 的访问级别,如下所示:
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private PrimaryKey id;
当使用@Data 时,默认情况下您有 public 访问访问器,使用 AccessLevel.NONE 将覆盖默认行为并且不允许访问访问器。
我有一个 @Entity
,其中包含三个字段 A、B、C,其中 A 和 B 充当复合主键。我创建了一个 @EmbeddedId
class 来保存 A 和 B。为了减轻定义 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
实际上) 实现此目的的唯一方法(我知道)是编写绕过 id 变量的临时 getter 和 setter,例如
@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
注释添加到您的主键。它应该看起来像:
@Entity
@Data
public class MyClass {
@Delegate
@EmbeddedId
private PrimaryKey id;
}
然后您可以 set/get 直接从 MyClass 中获取主键字段。 Here 是一个 link 供您阅读更多相关信息。
您可以使用 @Getter 和 @Setter 的访问级别,如下所示:
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private PrimaryKey id;
当使用@Data 时,默认情况下您有 public 访问访问器,使用 AccessLevel.NONE 将覆盖默认行为并且不允许访问访问器。