gpt4 book ai didi

java - 通过使用 Hibernate 管理外键依赖关系来进行 CRUD 操作

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:49 25 4
gpt4 key购买 nike

我有两个表,OrganizationOrganizationReferent(其中有一列作为外键),如下所示:

DB schema

通过使用 Hibernate 作为 ORM(在符合 JPA 的项目中),我获得了显示 here 的实体广告
我应该使用基于 Java EE 6数据访问对象 (DAO) 来管理 CRUD 操作。

OrganizationDAOOrganizationReferentDAO 都扩展了 GenericDAO 实现,提供了 create 方法,如下所示:

@Override
public EntityClass create(EntityClass entity) throws IllegalStateException, PersistenceException, ConstraintViolationException
{
entityManager.persist(entity);
entityManager.flush();
return entity;
}

现在,我定义了一个 Wrapper 类,旨在管理涉及两个已定义表的 CRUD 操作:

@Inject private OrganizationDAO organizationDAO;
@Inject private OrganizationReferentDAO organizationReferentDAO;

public final Organization createOrganization(final Organization organization) throws AlreadyExistsException, BadRequestException, DALException {
assert(organization != null);
organizationDAO.create(organization);
},

public final OrganizationReferent createOrganizationReferent(final Long organizationId, final OrganizationReferent organizationReferent) throws ConstraintViolationException, AlreadyExistsException, BadRequestException, DALException {
assert(organizationId != null);
assert(organizationReferent != null);
try {
organizationReferent.setOrganization(organizationDAO.findById(organizationId));
organizationReferentDAO.create(organizationReferent);
} catch (NotFoundException e) {
throw new ConstraintViolationException();
}
}
  1. 这种方法正确还是我应该使用不同的方法?

  2. 对于给定的基数,我应该强制创建还是编辑架构(例如,从 (1,*) 更改为 (0,*))?

最佳答案

广告 1)

我认为你的做法是正确的。一件重要的事情是您如何管理交易。一种常见的模式是让服务层类注入(inject)许多 DAO,并且此类服务类中的方法被标记为 @Transactional,但 DAO 方法永远不会被标记为 @Transactional

这样的服务类对不同的对象执行复杂的操作 - 这就是它可以在不同的 DAO 上操作的原因。您的包装类看起来像这样的服务层类。

第二件事是在这种地方不推荐使用entityManager.flush()。如果有更复杂的任务,则在每个entityManger.persist() 破坏性能后强制刷新。您应该跳过flush()调用——flush()将在事务提交之前自动调用。

广告 2)

我建议强制创建 1 个子记录以满足 (1,*) 要求...

关于java - 通过使用 Hibernate 管理外键依赖关系来进行 CRUD 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com