Java Spring 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

我将SpringBootWeb与JPA一起使用,以开发一个事件规划应用程序。 目前,我正在开发一个公共用户配置文件功能,在设计它时需要帮助,因为我不确定加入非持久性字段的最佳方式

用户类:

@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设置为只读视图,只从用户获取所需的列