Java Spring JPA-加入非持久性字段
我将SpringBootWeb与JPA一起使用,以开发一个事件规划应用程序。 目前,我正在开发一个公共用户配置文件功能,在设计它时需要帮助,因为我不确定加入非持久性字段的最佳方式 用户类:Java Spring JPA-加入非持久性字段,java,spring,hibernate,jpa,spring-boot,Java,Spring,Hibernate,Jpa,Spring Boot,我将SpringBootWeb与JPA一起使用,以开发一个事件规划应用程序。 目前,我正在开发一个公共用户配置文件功能,在设计它时需要帮助,因为我不确定加入非持久性字段的最佳方式 用户类: @Entity @Table(name = "users") public class User extends BaseEntity { @Column(name = "name") private String name; @Column(name = "email", uni
@Entity
@Table(name = "users")
public class User extends BaseEntity {
@Column(name = "name")
private String name;
@Column(name = "email", unique = true)
private String email;
@Column(name = "profile_picture")
private String profilePicture;
@Column(name = "facebook_token")
private String facebookToken;
other fields, method, and private data...
}
UserProfile类:
public class UserProfile {
private final String name;
private final String email;
private final String profilePicture;
...
}
客席:
@Entity
@Table(name = "guests")
public class Guest extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "event_id")
private Event event;
@Column(name = "status")
private String status;
@Column(name = "is_attending")
private boolean isAttending;
}
考虑到
UserProfile
是User
类的缩减,并且是非持久性的,在Guest
类中保存UserProfile
类的最佳方法是什么?在JPA中不能将非实体作为关系,因为JPA不知道UserProfile
一种解决方案是将UserProfile作为User的基类,然后使用@inheritance映射UserProfile和User
然后您可以在Guest和UserProfile之间建立持久关系,您可以使用嵌入式类在
Guest
类中保存UserProfile
,但它将是存在的。如果您希望UserProfile
的所有属性都是非持久的,您必须将@Transient
添加到它的每个属性。我不明白为什么您需要诚实地这样做。
无论如何,您只需执行以下操作,但这是一种糟糕的做法,因为您将DTO放在实体中,而不是相反:
@Transient UserProfile userProfile;
为什么不只是懒洋洋地加入用户的Guest呢?或者像其他人提到的那样,使用来宾和用户从UserProfile继承
另一个选项是简单地将UserProfile设置为只读视图,只从用户获取所需的列