【问题标题】:JPA enity has three times this same relationJPA 实体有三倍于这个相同的关系
【发布时间】:2015-07-23 02:59:42
【问题描述】:

我有两个简单的模型:

public class Wallet{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "WALLET_ID")
    private long walletId;

    @Column(name = "OWNER_LABEL")
    private String ownerLabel;

    @Column(name = "USER_ID")
    private long userId;
}

public class Transfer{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "TRANSFER_ID")
    private long transferId;

    @NotNull
    @Column(name = "AMOUNT")
    private BigDecimal amount = BigDecimal.ZERO;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "OWNER_WALLET_ID")
    private Wallet ownerWallet;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FROM_WALLET_ID")
    private Wallet fromWallet;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TO_WALLET_ID")
    private Wallet toWallet;
}

问题是当我想在一个查询中使用他的所有关系(钱包)进行转账时

SELECT t FROM Transfer t 
LEFT JOIN FETCH t.ownerWallet w 
LEFT JOIN FETCH t.toWallet tw 
LEFT JOIN FETCH t.fromWallet fw 
WHERE w.userId = :userId ORDER BY t.createdAt DESC

我得到了异常 MySQLIntegrityConstraintViolationException: Duplicate entry '2' for key 'PRIMARY' 你有灵魂吗?谢谢指教

【问题讨论】:

  • 可能与问题无关,但您不应该使用inner join 代替t.ownerWallet,因为您搜索的是w.userId
  • 查询不会抛出与插入数据相关的异常。如果显示异常,请给出堆栈跟踪和它来自的持久性代码

标签: java jpa jpa-2.0 jpql


【解决方案1】:

我很确定您在尝试插入一些数据并且主键重复时遇到了这个错误。 MySQLIntegrityConstraintViolationException 是关于 DB 模型中的约束违反,与选择数据无关。

【讨论】:

  • 我同意,但这应该是一个评论。
猜你喜欢
  • 2016-05-02
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
相关资源
最近更新 更多