0

我想知道这种情况的正确解决方案是什么。该方法在事务中运行。我删除了此方法的第一行,我将获得传递给持久异常的分离实体。我明白这个问题。该公司不在持久性环境中。下面的代码是唯一的解决方案吗?这是更好的方法吗?

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

2 回答 2

1
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";

我这样做是因为可以使用标准 IDE 工具重构 HQL,之后可能会继续工作。

HQL 上的 URL https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/queryhql.html

于 2012-09-20T11:44:11.783 回答
0

是的,这是删除单个实体的正确方法,据我所知,没有更好的方法。

如果您在使用 Eager fetch 时遇到问题,那么您应该重新考虑 JPA 实体的配置。


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

JPA 2.1中,他们提到了批量 DELETE 查询,但他们没有提到使用 DELETE 查询删除单个实体的任何内容,我认为这一定是有原因的。

于 2012-09-20T11:56:54.310 回答