Могу ли я редактировать поля спящего объекта внутри класса (например, некоторую доменную логику) или это может привести к некоторым проблемам, связанным с прокси? - PullRequest
1 голос
/ 05 октября 2019

Я знаю, что Hibernate использует прокси под капотом, и я знаю, например, что Spring-data использует прокси для транзакций, и есть ограничение с @Transaction Annotation (если метод1 из класса A вызывает метод2 с @Transaction Annotation из класса A, тоАннотация не будет иметь никакого эффекта). Итак, мой вопрос, есть ли какое-то подобное ограничение в Hibernate? Поскольку я хочу реализовать некоторую часть моей доменной логики внутри класса Hibernate-Entity, и для этого я должен быть уверен, что мои методы могут изменять поля (примитивы / другие сущности / коллекции сущностей) внутри класса без каких-либо проблем, связанных с Hibernate. См. Пример кода.

@Entity
public class MyEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  private Long id;

  @Column(unique = true, nullable = false)
  private String email;

  public void doChange() {
    doChangePrivate();
  }

  private void doChangePrivate() {
    email = "asdf@a.com";
  }
}

... 
start Transaction inside a Service-Class
... myentity.doChange();

Я попробовал это, и это сработало. Но могут ли возникнуть некоторые проблемы (связанные с hibernate), если я напишу некоторую часть логики своего домена в классе hibernate-entity, который изменяет поля (примитивы / entity / collection of entity) внутри транзакции?

1 Ответ

0 голосов
/ 06 октября 2019

Я нашел сообщение о чем-то похожем (https://thoughts -on-java.org / access-Strategies-in-jpa-and-hibernate / ), и похоже, что мне разрешено делать этоесли я использую полевой доступ (см. причину 5 в посте). Кто-нибудь может это подтвердить?

...