单向 OneToMany JPA 仅向我显示第一个相关对象“n”次

Posted

技术标签:

【中文标题】单向 OneToMany JPA 仅向我显示第一个相关对象“n”次【英文标题】:Unidirectional OneToMany JPA only shows me the first related object "n" times 【发布时间】:2022-01-23 20:49:24 【问题描述】:

我有下表,其中有很多文章。我想列出所有 'ventasc' 记录以及与 pk 具有相同 'iddocumento' 的所有 kardArt 记录。

升级: 我将 Set 更改为 List 但现在它显示了所有具有相同值的孩子(第一个)

@Entity
@Table(name = "ventasc")
public class Ventasc 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private @Getter @Setter Integer iddocumento;
    private @Getter @Setter String doc1;  
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Temporal(TemporalType.TIMESTAMP)
    private @Getter @Setter Date fecha1;
    private @Getter @Setter Double t_neto;
    @OneToMany
    @JoinColumn(name = "iddocumento")
    private @Getter @Setter List<KardArt> kardArts;
    

此表通过“iddocumento”链接到销售额。我认为这是问题所在,它可以作为 pk 和 fk 使用。我无法编辑数据库。

@Entity
@Table(name = "kard_art")
public class KardArt 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private @Getter @Setter Integer iddocumento;

    private @Getter @Setter Double movimiento;
    private @Getter @Setter Double subtotal;

注释的值是应该带的。


    "iddocumento": -2147483386,
    "doc1": "PED",
    "fecha1": "2021-10-05 05:00:00",
    "tneto": 5269.96,
    "kardArts": [
      
        "iddocumento": -2147483386,
        "movimiento": 100,
        "subtotal": 1530
      ,
      
        "iddocumento": -2147483386,
        "movimiento": 100, //100.3
        "subtotal": 1530 //1534.59
      ,
      
        "iddocumento": -2147483386,
        "movimiento": 100, //85.6
        "subtotal": 1530 //1309.68
      ,
      
        "iddocumento": -2147483386,
        "movimiento": 100, //3
        "subtotal": 1530 //45.90
      ,
      
        "iddocumento": -2147483386,
        "movimiento": 100, //3
        "subtotal": 1530 //45.90
      
    ]
,

【问题讨论】:

【参考方案1】:

mappedBy 用于双向依赖。

你必须使用@JoinColumn

@JoinColumn(name = "iddocumento")
@OneToMany
private @Getter @Setter Set<KardArt> kardArts;

【讨论】:

同样的输出,它应该给我带来 46 个 'KardArts' 但它只带来了 1 个 您确定数据库中的数据是正确的?你实现了equals和hashcode吗? 是的,第一条记录重复children次数。所有小计的总和必须等于 tneto。我可以用 lombok 实现 hashcode 和 equals 吗? 你说的“第一条记录是重复孩子的次数”是什么意思? "iddocumento": -2147483386, "movimiento": 100, "subtotal": 1530 假设 ventasc 有 10 个 KardArt 孩子。第一条记录会重复10次

以上是关于单向 OneToMany JPA 仅向我显示第一个相关对象“n”次的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JPA 中定义单向 OneToMany 关系

java JPA中的单向OneToMany关系

JPA 与同一实体的两个单向 @OneToMany 关系导致重复条目

JPA与同一实体的两个单向@OneToMany关系导致重复输入

JPA 单向一对多关联关系

JPA一对多单向