Java JPA@Version:如何使用它? 是否需要为版本创建setter/getter 当使用Hibernate持久化这个实体时,我不需要手动设置这个值,对吗 为了使用Spring的hibernateTemplate.saveOrUpdate,我还需要配置什么?是否支持所有数据库 如何对该实体进行单元测试?在我的数据库中,显示版本字段的所有记录的值均为0 每次调用hibernateTemplate.save或update都会增加版本值吗

Java JPA@Version:如何使用它? 是否需要为版本创建setter/getter 当使用Hibernate持久化这个实体时,我不需要手动设置这个值,对吗 为了使用Spring的hibernateTemplate.saveOrUpdate,我还需要配置什么?是否支持所有数据库 如何对该实体进行单元测试?在我的数据库中,显示版本字段的所有记录的值均为0 每次调用hibernateTemplate.save或update都会增加版本值吗,java,hibernate,spring,jpa,dao,Java,Hibernate,Spring,Jpa,Dao,我想说: 设置/获取版本是必需的,因为有时您可能会自己分配版本(从旧数据重新创建新实例时) 如果从数据库中读取实例,则不需要。(当使用new在代码中创建它时,情况就不同了) 我什么也没看见。我的数据库从来没有问题 在我看来,单元测试不涉及数据库,因此涉及数据库的测试称为集成测试。你不应该有太多的代码,因为它们很慢,而且它们不会真正测试你的代码,但是更多的是Hibernate/驱动程序/数据库代码。。。您应该信任他们,或者只测试他们一次,但不是对所有实体进行测试。 若要查看大于0的版本值,请在事务

我想说:

  • 设置/获取版本是必需的,因为有时您可能会自己分配版本(从旧数据重新创建新实例时)
  • 如果从数据库中读取实例,则不需要。(当使用new在代码中创建它时,情况就不同了)
  • 我什么也没看见。我的数据库从来没有问题
  • 在我看来,单元测试不涉及数据库,因此涉及数据库的测试称为集成测试。你不应该有太多的代码,因为它们很慢,而且它们不会真正测试你的代码,但是更多的是Hibernate/驱动程序/数据库代码。。。您应该信任他们,或者只测试他们一次,但不是对所有实体进行测试。
    若要查看大于0的版本值,请在事务中读取/修改/更新实体,版本将增加1。退出交易,再做一次,价值就会增加
  • 每次修改数据库行时,版本都会增加

  • @KLE仅在案例2中,用户同时调用hibernatetemplate.saveorupdate,在调用hibernatetemplate.saveorupdate时无需进行额外检查?任何异常抛出?@cometta问题不在于是否保存,而在于数据来自何处。在事务中,如果从数据库中读取实体,则其版本信息是最新的。当您保存它时,它会自动处理。如果有一天您碰巧从另一个源(例如表单的post)获取数据并重新创建实体,那么您必须自己处理版本。这里有一个很好的解释:集成测试-它们并不真正测试您的代码-真的吗?那么阿奎利安做什么呢?
    @Entity
    public class Person {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Long id;
    
        private int salary;
    
        @Version
        private long version;
    
        // ...getters and setters
    }