說我有一個用戶表和一個UserRecordInfo表,它保存了用來更改用戶信息的操作。例如:Hibnerate ManyToOne總是級聯,當它沒有被要求時
用戶:
| UserID |用戶名|
| 1 |測試|
和UserRecordInfo:
| UserRecordInfoID |用戶ID |操作| oldValue | newValue |
| 1 | 1 |更新名稱| oldTest | test2 |
| 2 | 1 |更新名稱| test2 |測試|
顯然在Java中,當設計對象時,我不想在User中有一個UserRecordInfo字段,因爲每個用戶可能有數百個UserRecordInfo。我所擁有的是:
@Entity
@Table(name="User")
public class User {
private userName;
@Column(name = "userName")
public String getUserName() {
System.out.println("getting username");
return userName;
}
...
}
和
@Entity
@Table(name="UserRecordInfo")
public class UserRecordInfo {
private User user;
@JoinColumn(name = "UserID") // using javax.persistence.JoinColumn
@ManyToOne(fetch = FetchType.LAZY) // using javax.persistence.ManyToOne
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
我創造新的UserRecordInfo的方式是:
User u = {get user from hibernate}
UserRecordInfo record = new UserRecordInfo();
record.setUser(u);
.setNewName("test1");
...
Session session = DBSessionHandler.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Serializable result = session.save(record);
tx.commit();
return result;
}
catch (HibernateException ex) {
ex.printStackTrace();
if (tx!=null) tx.rollback();
throw ex;
}
finally {
DBSessionHandler.close();
}
但是好像每當我插入一個新的UserRecordInfo,用戶對象總是感動(println總是打印「獲取用戶名」)。這是爲什麼發生?難道我做錯了什麼?
你有'User'類'@ Id'場? – DontRelaX 2014-12-07 19:22:09
@DontRelaX是的,我只是爲了簡單起見,我沒有把它放在這裏。 – jamesdeath123 2014-12-08 01:45:54