2017-05-31 75 views
0

我使用彈簧啓動(1.5.2.RELEASE)與休眠芯(5.2.9.Final)多冬眠@Id在基地和子

說明我有兩個班(getter方法,setter方法,構造函數爲dB(3列USERS表,並用6列USERS_HISTORY)中省略)和適當的表

public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private Long id; 
    private String firstName; 
    private String lastName; 
    } 

    public class UserHistory extends User implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private Long hstId; 
    private Instant hstTimestamp; 
    private String changedBy; 
    } 

如何可以註釋User.id和UserHistory.hstId既與@Id註釋?

我不能僅註釋User.id,因爲一個用戶在歷史表中可以有多行。

當我調用userRepository.findOne(Long id)我想選擇用User行與User.id,並且當我調用userHistoryRepository.findOne(長hstId)時,我想選擇與UserHistory.hstId UserHistory行。

UserHistoryRepository和UserRepository都擴展Spring Data JPA CrudRepository。

我目前的解決方案基於三個類,但我試圖找到僅基於兩個類的解決方案。

我目前的解決辦法是這樣的:

public class UserBase implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private String firstName; 
    private String lastName; 
    } 

    public class User extends UserBase implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    Long id; 
    } 

    public class UserHistory extends UserBase implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private Long hstId; 
    private Instant hstTimestamp; 
    private String changedBy; 
    private Long id; 

    //constructor sets this.id = User.id 
    public UserHistory(Long hstId, Instant hstTimestamp, String changedBy, User user) { 
     //other lines omitted 
     this.id = user.id; 
    } 
    } 

回答

0

在不應該延長User你的情況UserHistory

使用One to Many的關係,因爲一個用戶可以在歷史表

+0

喜多行,UserHistory必須擴展用戶。我正在使用UserHistory對象和相應的表作爲審計表,類似於Hibernate中的Envers,但更具可讀性(獲取所有用戶歷史記錄,我可以調用select * from USERS_HISTORY where id = user.id)。就像我可以看到在某個用戶對象上所做的每個更改。 –

+0

只要相信我,所有你需要的是一對多的關係 –