我见过的大多数 JPA/Hibernate 实体 bean 类示例似乎都没有显式同步。然而,可以在构建事务的上下文中调用这些对象的 getter/setter。并且可以跨多个线程调用这些方法(尽管这可能不寻常且奇怪)。
似乎如果它是跨多个线程构建的,那么对象状态的更改可能会丢失,这将是令人遗憾的。
那么,忽略同步是最佳实践吗? Hibernate 检测代码是否会为我处理正确的同步?
举个例子:
@Entity
public class Ninja {
@Id @GeneratedValue
private Long id;
@Column
private String name;
@Column
private int throwingStars;
public Ninja() {}
public int getThrowingStars() { return throwingStars; }
public void addThrowingStar() { throwingStars += 1; }
}
throw 星方法需要同步吗?我当然不希望我的忍者失去任何飞镖。
最佳答案
在我看来,你永远不应该跨线程共享域对象。事实上,我通常在线程之间共享很少的数据,因为必须保护此类数据。我已经构建了一些大型/高性能系统,并且从未违反过这条规则。如果您需要并行化工作,那么可以这样做,但不要通过共享域对象的实例来实现。每个线程都应该从数据库读取数据,通过改变/创建对象来对其进行操作,然后提交/回滚事务。工作传入/传出通常应该是值/只读对象。
关于java - JPA/Hibernate 实体类和同步的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/183629/