我有三张桌子:
user(id, name),
group(id, name),
xref_user_group(user_id, group_id)
我有两个java类:
User {
int id;
String name;
}
Group {
int id;
String name;
Set<User> users;
}
如果不在内存中加载组对象,是否可以从组中删除用户(而不是删除用户)。我需要某种HQL查询。 Smth喜欢(我的想象力):
delete user from Group where user.name = :username
我无法添加任何数据库或Hibernate级联。
我需要它是交易性的。
如果无法通过HQL进行,并且没有在内存中加载对象,那么最佳解决方案是什么?
答案 0 :(得分:1)
你的hql应该按照你的要求,以及jpa环境:) Session.createQuery( “......”)。的executeUpdate()
答案 1 :(得分:0)
首先你要求HQL,然后说你不能运行HQL。这是什么。
如果您可以使用HQL,您的基本HQL删除将起作用。它永远不会级联(这可能是一个问题),永远不会加载等。请参阅hibernate doc中的“批量更新操作”以获取更多信息。
如果你不能使用HQL,那么使用query.createSQLQuery或其他任何东西来做本机SQL。
最后,第三个选项是使用StatelessSession - 这也在hibernate doc中讨论过。
以下是相关的link。阅读,理解,喜欢它:)。
答案 2 :(得分:0)
您无法编写该查询。如果这是一个真正的要求,您可能需要将连接表提升为完整的实体,以便您可以直接删除它,或者在本机SQL中编写查询。
另一种选择可能是将您的用户映射为MAP并使用延迟加载来避免加载多余的用户。
答案 3 :(得分:0)
是的,这可以通过HQL实现,不,它不需要将组加载到内存中。
如果要从一个组中删除一个用户,以下HQL应该非常接近:
delete g.users from Group g where g.users.name = :username and g.id = :groupId
或者,如果您尝试从所有组中删除用户,只需删除其中的第二部分:
delete g.users from Group g where g.users.name = :username