我用這兩個實體創建一個新的用戶和組它關聯:多對多assoicate刪除連接表項
@Entity
@Table(name="usertable")
@SuppressWarnings("serial")
@Searchable
public class User implements Serializable {
@GeneratedValue(generator="userIdSeq")
@SequenceGenerator(name="userIdSeq", sequenceName="usertable_id_seq")
@SearchableId
@Id
int id;
@SearchableProperty
String userId; // 'Unique identifier. It is formed using this fashion: ''prefix:identifier''
String userName; // Name used to log in the application.
String email; // User's email
@ManyToMany
@JoinTable(name="usergroup",
[email protected](name = "userid", referencedColumnName="userId"),
[email protected](name = "groupid")
)
List<Group> groups;
...
}
// Group
@Entity
@Table(name="grouptable")
public class Group implements Serializable {
@Id
String groupId // Unique identifier for group.
String description // Brief text describing the group purposes.
@ManyToMany(mappedBy="groups")
@Cascade(SAVE_UPDATE)
List<User> users
....
}
在數據庫: 用戶表(ID,用戶id,名) grouptable將(ID,描述) 用戶組(用戶ID,組識別,groupkey)
這是非常令人滿意的組添加到組的列表,調用保存方法上的用戶和togehter觀看休眠保存usergoup。然而,當我在保存(用戶)操作後檢索用戶時,我有一個休眠問題會自動從用戶組表中自動刪除條目。
下面是測試序列生成用戶組
- 刪除保存新的用戶
- 保存新組
- 和組列出在用戶
- 節省用戶從
- 獲得用戶電子郵件
@Test @Transactional public void testGetUserByEmail(){ Session session = factory.getCurrentSession(); String email = "[email protected]"; User user = createUser(); user.setWeCanContact(true); user.setPartnersCanContact(false); user.setAgreedTerms(false); user.setReferer("Laura"); String groupId = "AARP"; String description = "Appletalk Address Resolution Protocol"; Group group1 = new Group(); group1.setGroupId(groupId); group1.setDescription(description); session.save(group1); session.flush(); user.getGroupLists().add(group1); session.saveOrUpdate(user); User testUser = userRepository.getUserByEmail(email); assertNotNull(testUser); assertEquals("It's not the correct email", email, testUser.getEmail()); }
private User createUser(){
Session session = factory.getCurrentSession();
String userId = "UB:2010";
String userPassword = "sarah";
String realName = "Sarah Silverman";
String email = "[email protected]";
User user = new User();
user.setUserId(userId);
user.setUserName(email);
user.setUserPassword(userPassword);
user.setRealName(realName);
user.setEmail(email);
List<Group> emptyGroupLists = new ArrayList<Group>();
user.setGroupLists(emptyGroupLists);
Group group = new Group();
group.setGroupId("ABC");
group.setDescription("A for apple");
user.getGroupLists().add(group);
session.save(group);
session.save(user);
session.flush();
return user;
}
// Repository Method to get user from email // // @NamedQuery(name="user.findByEmail", // query="SELECT u FROM User u " + // "LEFT JOIN FETCH u.groupLists " + // "WHERE upper(u.email) = :email") public User getUserByEmail(String email) { Session session = sessionFactory.getCurrentSession(); Query query = session.getNamedQuery("user.findByEmail"); query.setParameter("email", email.toUpperCase()); User user = (User)query.uniqueResult(); return user; }
之前執行與像 // SQL輸出
Hibernate:
delete
from
usergroup
where
userid=?
幾件事我要注意自動刪除步驟5中,用戶組; 1.用戶ID不是用戶對象的PK。那會是問題嗎? 2.由userrid和groupid映射的usergroup中的manyTomany映射 3.它不僅發生在Test中。它也在發展中。如何停止用戶組的自動刪除。用戶組是非常重要的表格,不應該被刪除。任何幫助將非常感激。謝謝。
@JohnnyBeGood除非你顯示你的測試情況下,我們不能幫你。 – 2010-01-17 15:52:00
@Arthur非常感謝您的回覆。測試用例已添加。請讓我知道我是否可以澄清其他事情。我一直在嘗試使用不同的@Casade選項。再次感謝。 – JohnnyBeGood 2010-01-17 20:35:35
您是新用戶。歡迎,但如果你看到有用的答案,UPvote。謝謝。 – 2010-01-17 23:50:20