【问题标题】:jpa repository returns incomplete recordsjpa 存储库返回不完整的记录
【发布时间】: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


【解决方案1】:

我的错误,正如 M. Deinum 所发现的,我错误地配置了我的实体。该表有一个复合 pk,而我认为它有简单的序列。所以我的猜测是 jpa 会生成一个正确的查询,但是当它发出结果列表时,它会找到两条带有重复 pk 的记录,并且没有完全提取第二条记录。

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2019-04-20
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2017-04-23
    • 2018-11-09
    相关资源
    最近更新 更多