2012-09-20 117 views
0

我想知道这种情况的正确解决方案是什么。该方法正在事务中运行。我删除了这个方法的第一行,我将得到分离的实体传递给持久化异常。我理解这个问题。该公司不在持久性背景下。 下面的代码是唯一的解决方案吗?这是更好的方式吗?持久性上下文休眠

@Override 
public void delete(Company company) { 
    company = companyDao.get(company.getId(), CompanyLoadParameter.LOAD_LANGUAGES); 
    companyDao.delete(company); 
} 
+1

要理解这个问题,您希望从数据库中删除特定的公司实体,但不希望先执行SELECT? –

+0

是的。如果没有首先从DB.company = companyDao.get(company.getId(),CompanyLoadParameter.LOAD_LANGUAGES)获取对象,可以这样做吗? – pethel

回答

0
Session#createQuery("DELETE FROM " + Company.class.getName() + 
    " WHERE " + Company.K_id "=?") 
    .addParameter(0, CompanyLoadParameter.LOAD_LANGUAGES) 
    .executeUpdate(); 

哪里Company.K_id是主键的Java属性名称(字符串)。

public static final String K_id = "id"; 

我这样做,因为HQL可以使用标准的IDE工具重构,并且可能在之后继续工作。在HQL https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/queryhql.html

URL

+0

好吧,HQL就是答案。谢谢 – pethel

0

是,这是正确的方式删除单个实体和我的信息,有没有更好的办法。

如果您在预先抓取时遇到问题,那么您应该重新考虑您的JPA实体配置。


还有另一种方法是使用HQL DELETE查询,但这次有一个issue。删除操作不会级联到关联的集合。这是危险和丑陋的。

JPA 2.1他们提到批量DELETE查询,但他们没有提及使用DELETE查询删除单个实体的任何事情,我认为必须有一个原因。