我用这两个实体创建一个新的用户和组它关联:多对多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