2016-02-27 66 views
1

我正在使用Spring Boot Web和JPA来开发事件计划应用程序。 目前,我正在开发一个公共用户配置文件功能,并且我需要设计它的帮助,因为我不确定加入非持久字段的最佳方式。Spring 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... 
} 

的用户配置类:

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类的最佳方式Guest类,考虑到UserProfileUser类的减少,它是非持久性的?

回答

0

你不能有一个非实体的JPA的关系,因为JPA不知道用户配置。

一种解决方案可以是具有用户配置作为基类用户,然后MAPP用户配置和用户与@Inheritence。

然后你就可以拥有客户和用户配置

之间持久关系
0

您可以使用嵌入类的Guest类来保存UserProfile,但它会presistent.If你想要的所有UserProfile属性是不可持久的,你必须将@Transient添加到它的每个属性。

0

我不明白为什么你需要老老实实这样做。 无论如何你只需做到以下几点,但是这是一个不好的做法,因为你把一个DTO的实体内,而不是相反的:

@Transient UserProfile userProfile; 

为什么不干脆懒洋洋地加入客户机上使用的用户?或者使用Guest和User的UserProfile继承,如其他人所述。

另一种选择是简单地使用户配置一个只读视图只有来自用户获取所需的列。