java - 我可以在类内编辑 hibernate 实体的字段(例如某些域逻辑)还是会导致一些与代理相关的问题?

标签 java hibernate spring-data-jpa

我知道 Hibernate 在底层使用代理,并且我知道 Spring-data 使用代理进行事务,并且 @Transaction 注解存在限制(如果 A 类中的 method1 使用 A 类中的 @Transaction 注解调用 method2,则注解将不起作用)。所以我的问题是 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-entity 类中编写域逻辑的某些部分来修改事务中的字段(基元/实体/实体集合),是否会出现一些问题(与 hibernate 相关)?

最佳答案

我发现了一篇关于类似内容的帖子 ( https://thoughts-on-java.org/access-strategies-in-jpa-and-hibernate/ ),看起来如果我使用基于字段的访问,我就可以执行此操作(请参阅帖子中的原因 5)。有人可以证实这一点吗?

关于java - 我可以在类内编辑 hibernate 实体的字段(例如某些域逻辑)还是会导致一些与代理相关的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248289/

相关文章:

java - 更改表单中的 spring jsp 日期输入绑定(bind)以使用 freemarker

java - eclipse server(tomcat) 在启动时找不到 servlet,尽管在部署项目时 native tomcat 运行良好

java - mysql:服务器重启后保持自动递增计数器 - 不一致的envers审计表

java - 如何在 Hibernate Where 子句中使用 CASE WHEN

spring - 如何在 Spring-Data-JPA 存储库中重用参数?

java - 类型删除 - 将 Java 泛型类扩展为非泛型类

java - 无法解析 com.android.tools.build :gradle:3. 1.4,react-native run-android

java - hibernate :org.hibernate.MappingNotFoundException

hibernate - 延迟加载在带有 Hibernate 的 JPA 中不起作用

java - 尝试更新多对多数据结构时获取 'Multiple representations of the same entity'