我在使用hibernate和spring-data的autopersist时遇到了问题。我有以下服务创建entityA。JPA分离实体在退出时仍然存在
@Service
public class entityAService {
private final EntityARepository repository;
@PersistenceContext(unitName = "entityManagerFactory")
EntityManager entityManager;
@Autowired
public entityAService(EntityARepository repository) {
this.repository = repository;
}
@Transactional
public EntityA create(EntityA entityA) {
repository.save(entityA);
if (entityA.getRegisterExternal) {
registerExternal();
}
return entityA;
}
private void registerExternal() {
// we always need the entityA to be registered, however we don't want to not allow entityA creation if
// the external register service is down. Thus we need to check for any non registered entityA's and try
// to register them again.
Set<EntityA> entities = repository.getEntityAWithRegisterExternalAndNotRegistered();
ExternalRegister register = new ExternalRegister();
for (EntityA entity: entities) {
try {
register.register(entity);
entity.setRegistered(true);
repository.save(entity);
} catch (RegisterException e) {
logger.warn("exception", e);
}
}
return;
}
}
我遇到麻烦的是“entity.setRegistered(true);”为正在创建的实体A.当我通过这个过程时,在“registerExternal();”之后在create方法中,我可以在db中看到最新的entityA.registered = true。但是,在create方法结束之后,entityA.registered会被设置为false。
我曾尝试在“registerExternal()”调用之前调用“entityManager.detach(entityA)和entityManager.clear()以及调用之后的”entityManager.refresh(entityA),但似乎没有任何工作。
有没有办法将对象设置为不autopersist?