【发布时间】:2019-03-07 09:39:25
【问题描述】:
我遇到了以下问题:CrudRepository 返回与数据库数据不匹配的错误结果。
有一个实体类:
@Entity
@Table(name = "ATTRIBUTE")
public class Attribute implements Serializable {
private static final long serialVersionUID = 7360594743377794716L;
*******
@Id
@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private Long id;
*******
@Column(name = "R_ORGANIZATION_ID")
private Long refOrganizationId;
@Column(name = "TEXT_CODE")
private String textCode;
*******
/**
getters, settrs, hashCode, etc
**/
}
我有一个合适的CrudRepository
public interface AttributeRepository
extends CrudRepository<Attribute, Long> {
*****
boolean existsByTextCodeAndRefOrganizationId(String textCode, Long organizationId);
*****
}
问题是存储库为不在数据库中的数据返回true。
例如,我将 'asdf' 作为 textCode 传递,将 0 作为 organizationId 传递。尽管数据库中没有这样的textCode,但我得到了true。
这是查询的自动生成代码:
select
TOP(?) attribute0_.id as col_0_0_
from
attribute attribute0_
where
attribute0_.text_code=?
and attribute0_.r_organization_id=?
12:00:24.805 [http-nio-8080-exec-6] TRACE o.h.t.d.s.BasicBinder - binding parameter [2] as [VARCHAR] - [asdf]
12:00:24.805 [http-nio-8080-exec-6] TRACE o.h.t.d.s.BasicBinder - binding parameter [3] as [BIGINT] - [0]
但如果我在任何 SQL 管理器中运行查询,我将得到 0 行。会是什么?
资料:MS SQL Server 2012, Java 1.8, spring-boot.version 1.5.4.RELEASE
【问题讨论】:
-
也许记录是在事务中创建的,然后修改删除?
-
@talex 没有任何创建/更新操作。只选择。
-
尝试用
get...替换exists...并记录结果。它可能会为您提供有关它找到哪些数据的线索。
标签: java sql-server spring-data-jpa spring-data