我有一个具有@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 .. }
假设JPA而不是严格@Embedded地处于hibernate状态,则可以通过应用getter / setter对而不是私有成员本身来实现。
@Embedded
@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的主要原理是代码重用,在这种情况下这似乎不太可能。