一尘不染

JPA:@Embeddable对象如何获得对其所有者的引用?

hibernate

我有一个具有@Embedded类Profile的User类。如何给Profile实例引用其所有者User类?

@Entity
class User implements Serializable  {
   @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer id;

   @Embedded Profile profile;

   // .. other properties ..
}

@Embeddable
class Profile implements Serializable {

   User user; // how to make this work?

   setURL(String url) {
      if (user.active() ) { // for this kind of usage
         // do something
      }
   }

   // .. other properties ..
}

阅读 258

收藏
2020-06-20

共1个答案

一尘不染

假设JPA而不是严格@Embedded地处于hibernate状态,则可以通过应用getter / setter对而不是私有成员本身来实现。

@Entity
class User implements Serializable {
   @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer id;

   @Access(AccessType.PROPERTY)
   @Embedded
   private Profile profile;

   public Profile getProfile() {
      return profile;
   }

   public void setProfile(Profile profile) {
      this.profile = profile;
      this.profile.setUser(this);
   }

   // ...
}

但是,我想问的是,在这种情况下,嵌入式实体是否就是您想要的,而不是@OneToOne关系,或者只是将Profile类“展平”到User中。@Embeddable的主要原理是代码重用,在这种情况下这似乎不太可能。

2020-06-20