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)。就像我可以看到在某个用户对象上所做的每个更改。 –
只要相信我,所有你需要的是一对多的关系 –