Java Hibernate доступ к свойствам @Formula для дополнительной проверки / обогащения после сохранения

#java #hibernate

#java #спящий режим

Вопрос:

Если у меня есть две сущности:

 @Entity
@Table(name="PARENT_ENTITY")
public class ParentEntity {
    
    @Id
    @Column(name="ID")
    private Integer id;

    // ... Other fields

    @Column(name="COLUMN_2")
    private String column2;

    // ... Other fields

    // Getters and setters
}

@Entity
@Table(name="CHILD_ENTITY")
public class ChildEntity {
    
    @Id
    @Column(name="ID")
    private Integer id;

    @Column(name="PARENT_ID")
    private Integer parentId;

    // ... Other fields

    @Formula("(select COLUMN_2 from {schema}.PARENT_ENTITY p where p.ID = PARENT_ID)")
    private String column2;

    // Getters and setters
}
 

Когда я сохраняю экземпляр ChildEntity , свойство @Formula не заполняется:

 session.saveOrUpdate(childEntity)

childEntity.getColumn2(); // this equals "" 

childEntity.postValidate() // validation that relies on @Formula values 

// I want to persist if validation succeeds, but not persist if validation fails
session.flush()
 

Есть ли эффективный способ сделать это, не выходя и не запрашивая PARENT_ENTITY каждый раз?

Ответ №1:

Вы можете выполнить запрос через, например entityManager.createNativeQuery , или, возможно, использовать entityManager.refresh для обновления объекта.

Комментарии:

1. session.refresh() — это то, что я искал, спасибо.