2015-05-12 1 views
0

у меня есть две простые модели:JPA enity три раза в этом же отношении

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: Дублируемая запись '2' для ключа 'PRIMARY' У вас есть душа? Спасибо в совете

+0

Возможно, не связано с проблемой, но разве вы не должны использовать 'inner join' для' t.ownerWallet', так как вы выполняете поиск по 'w.userId'? –

+0

В запросе не возникает исключение, связанное с вставкой данных. Если вы показываете исключение, укажите трассировку стека и код персистентности, полученный от –

ответ

0

Я уверен, что вы получаете эту ошибку при попытке вставить некоторые данные и иметь дубликат первичного ключа. MySQLIntegrityConstraintViolationException - это нарушение ограничений в модели БД, ничего о выборе данных.

+0

Я согласен, но это должен быть комментарий. –

 Смежные вопросы

  • Нет связанных вопросов^_^