【发布时间】: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? -
查询不会抛出与插入数据相关的异常。如果显示异常,请给出堆栈跟踪和它来自的持久性代码