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;
}
}
喜多行,UserHistory必須擴展用戶。我正在使用UserHistory對象和相應的表作爲審計表,類似於Hibernate中的Envers,但更具可讀性(獲取所有用戶歷史記錄,我可以調用select * from USERS_HISTORY where id = user.id)。就像我可以看到在某個用戶對象上所做的每個更改。 –
只要相信我,所有你需要的是一對多的關係 –