Java 为什么选择查询递增@Version

Java 为什么选择查询递增@Version,java,spring,hibernate,jpa,hql,Java,Spring,Hibernate,Jpa,Hql,执行以下语句后,类应用程序的版本将递增 Queue queue = queueDao.fetchQueueByApplicationId(application.getApplicationId()); 这只是一个简单的获取查询,它不应该以任何方式增加调用的版本。但在上线执行之后,应用程序类的版本意外增加 有人能帮忙吗 谢谢 Queue.java @Entity @Table(name = "queue") @NamedQuery(name = "queueByApplicationId",

执行以下语句后,类应用程序的版本将递增

Queue queue = queueDao.fetchQueueByApplicationId(application.getApplicationId());
这只是一个简单的获取查询,它不应该以任何方式增加调用的版本。但在上线执行之后,应用程序类的版本意外增加

有人能帮忙吗 谢谢

Queue.java

@Entity
@Table(name = "queue")
@NamedQuery(name = "queueByApplicationId", query = "SELECT q from Queue q WHERE q.application.applicationId = ?")
public class Queue implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "queue_id", unique = true, nullable = false)
    private Long queueId;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created", nullable = false, length = 19)
    private Date created;

    @Column(name = "created_by")
    private Long createdBy;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updated", length = 19)
    private Date updated;

    @Column(name = "updated_by")
    private Long updatedBy;

    @Version
    @Column(name = "version", nullable = false)
    private Integer version;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "application_id")
    private Application application;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "queue", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    private List<QueueAssignedToRole> queueAssignedToRoles;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "queue", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    private List<QueueAssignedUser> queueAssignedUsers;

    getter setter ....

}
ApplicationQueueDaoImpl.java

@Repository
public class ApplicationQueueDaoImpl extends AbstractDao<Queue> {

    private static final Logger LOGGER = LogManager.getLogger(ApplicationQueueDaoImpl.class);

    @Override
    public Queue fetchQueueByApplicationId(Long applicationId) {
        LOGGER.debug("Fetching Queue information for applicationId {}", applicationId);
        List<Queue> queues = executeNamedQuery("queueByApplicationId", Queue.class, applicationId);
        return CollectionUtils.isEmpty(queues) ? null : queues.get(0);
    }

}
@存储库
公共类应用程序QueueDaoImpl扩展了AbstractDao{
私有静态最终记录器Logger=LogManager.getLogger(ApplicationQueueDaoImpl.class);
@凌驾
公共队列fetchQueueByApplicationId(长applicationId){
debug(“获取applicationId{},applicationId的队列信息);
列表队列=executeNamedQuery(“queueByApplicationId”,Queue.class,applicationId);
return CollectionUtils.isEmpty(queues)?null:queues.get(0);
}
}
AbstractDao.java

protected <T> List<T> executeNamedQuery(String queryName, Class<T> resultType, Object... positionalParams) {
        TypedQuery<T> query = entityManager.createNamedQuery(queryName, resultType);
        DAOUtils.setPositionalParams(query, positionalParams);

        return query.getResultList();
    }
受保护列表executeNamedQuery(字符串queryName、类resultType、对象…位置参数){
TypedQuery query=entityManager.createNamedQuery(queryName,resultType);
setPositionParams(查询,位置参数);
返回query.getResultList();
}

您如何知道您的查询正在增加版本?数据库中是否存在正在增加版本的触发器?是否有其他进程增加版本?您是否已通过代码对其进行调试?@Jim Garrison在调试时,将记录器放在获取查询之前和之后以捕获版本,在这条语句中才知道其递增,但这并没有回答他的前两个问题。转储SQL命令。没有触发器,哪些SQL命令是u r syng?请查看所选JPA提供程序的日志,了解它调用的SQL。这应该是调试与数据库对话的第一步
protected <T> List<T> executeNamedQuery(String queryName, Class<T> resultType, Object... positionalParams) {
        TypedQuery<T> query = entityManager.createNamedQuery(queryName, resultType);
        DAOUtils.setPositionalParams(query, positionalParams);

        return query.getResultList();
    }