【发布时间】:2020-12-16 13:57:39
【问题描述】:
我为一个非常简单的表编写了一个非常简单的 jpaRepository,当我调用我的方法通过过滤列获取记录时,我得到了两个结果,但第二个结果看起来不完整,因为表只有一个列。 这是映射实体
@Entity
@Table(name="TE106_SEC")
public class Section {
@Id
@Column(name = "N_REV_ID")
private Long revision;
@Column(name = "N_CPR_PIT")
private Integer N_CPR_PIT;
@Column(name = "C_POR")
private String C_POR;
@Column(name = "N_PRG")
private Integer N_PRG;
@Column(name = "C_SID_STR_TYP")
private String C_SID_STR_TYP;
public Long getRevision() {
return revision;
}
public void setRevision(Long revision) {
this.revision = revision;
}
public Integer getN_CPR_PIT() {
return N_CPR_PIT;
}
public void setN_CPR_PIT(Integer n_CPR_PIT) {
N_CPR_PIT = n_CPR_PIT;
}
public String getC_POR() {
return C_POR;
}
public void setC_POR(String c_POR) {
C_POR = c_POR;
}
public Integer getN_PRG() {
return N_PRG;
}
public void setN_PRG(Integer n_PRG) {
N_PRG = n_PRG;
}
public String getC_SID_STR_TYP() {
return C_SID_STR_TYP;
}
public void setC_SID_STR_TYP(String c_SID_STR_TYP) {
C_SID_STR_TYP = c_SID_STR_TYP;
}
}
这是存储库
package repository.reportmanager;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import model.entity.Section;
public interface ProjectSectionRepository extends JpaRepository<Section, Long>{
List<Section> findByRevision(Long revision);
}
这些是调试信息,如果在数据库客户端(在我的情况下为 dbeaver)执行,生成的查询可以正常工作
select
section0_.n_rev_id as n_rev_id1_4_,
section0_.c_por as c_por2_4_,
section0_.c_sid_str_typ as c_sid_str_typ3_4_,
section0_.n_cpr_pit as n_cpr_pit4_4_,
section0_.n_prg as n_prg5_4_
from
te106_sec section0_
where
section0_.n_rev_id=6700
2020-12-16 14:39:22.874 TRACE 11424 --- [nio-9081-exec-4] o.h.type.descriptor.sql.BasicExtractor : extracted value ([n_rev_id1_4_] : [BIGINT]) - [6700]
2020-12-16 14:39:22.883 TRACE 11424 --- [nio-9081-exec-4] o.h.type.descriptor.sql.BasicExtractor : extracted value ([c_por2_4_] : [VARCHAR]) - [A]
2020-12-16 14:39:22.889 TRACE 11424 --- [nio-9081-exec-4] o.h.type.descriptor.sql.BasicExtractor : extracted value ([c_sid_str_typ3_4_] : [VARCHAR]) - [null]
2020-12-16 14:39:22.894 TRACE 11424 --- [nio-9081-exec-4] o.h.type.descriptor.sql.BasicExtractor : extracted value ([n_cpr_pit4_4_] : [INTEGER]) - [1]
2020-12-16 14:39:22.899 TRACE 11424 --- [nio-9081-exec-4] o.h.type.descriptor.sql.BasicExtractor : extracted value ([n_prg5_4_] : [INTEGER]) - [1]
2020-12-16 14:39:22.904 TRACE 11424 --- [nio-9081-exec-4] o.h.type.descriptor.sql.BasicExtractor : extracted value ([n_rev_id1_4_] : [BIGINT]) - [6700]
**--- second records ends here ---------------------------------------------**
我尝试向方法中添加 Query 属性,将查询定义为原生,使用 Example 实体调用 findAll 默认方法。没有什么变化。 我看不出我的代码有什么问题
【问题讨论】:
-
您正在通过称为修订的 Id 列获取您的实体,结果您得到一个具有 5 列的具有指定修订的实体,所以它看起来不错。你想达到什么目的?还有一件事:您能否在调用存储库方法的地方添加代码?
-
因为
revision也是@Id它甚至不应该返回 2 条记录。如果确实如此,则您的实体映射是错误的,或者您没有在此处显示实际代码。如果是 id(主键),您应该使用findById而不是您的方法。在使用 JPA 时,您确实应该实现 equals 和 hashCode 方法。
标签: java spring jpa spring-data