我有一个对象 -
@Entity
public class myObject{
public MySecondObject objA;
public MySecondObject objB;
...
}
我没有任何实例,但我想删除db中的所有行 fieldA == thirdObj 我有第三个OBJ的实例,但没有myobjects的实例。 可以使用本机sql来完成它。但是我需要使用自动分配的第三个id的id - 在db中进行比较 有比这更优雅的方式吗?
try {
session.beginTransaction();
session.createQuery("delete from MyObject where fieldA = " +
thirdObject.getID()).executeUpdate();
session.getTransaction().commit();
savedSuccessfully = true;
} catch (HibernateException e) {
session.getTransaction().rollback();
savedSuccessfully = false;
} finally {
session.close();
}
return savedSuccessfully;
答案 0 :(得分:3)
它应该与HQL一起使用
session
.createQuery("delete from MyObject where objA = :third")
.setEntity("third", thirdObject)
.executeUpdate();
但是有一些限制:HQL删除不会级联(大多数)引用,如果有子类,则不识别实际类型。如果你的班级是一个简单的班级,那就可以了。
答案 1 :(得分:1)
a)在您的示例中,您使用的是HQL,而不是本机SQL。差异很大。
b)不,这是两种可能性。删除一个对象(但必须先加载它)或按id删除(但这只能通过HQL或本机SQL实现)。