hibernateとspring-dataを使用するオートパーシストに問題があります。私は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を見ることができます。ただし、メソッドの作成が完了した後、entityA.registeredはfalseに設定されます。
私は "registerExternal()"呼び出しの前に "entityManager.detach(entityA)and entityManager.clear()"を呼び出しようとしましたが、呼び出し後には "entityManager.refresh(entityA)
オートパーシストにしないようにオブジェクトを設定する方法はありますか?