私Client
は と 1 対 1 の 1 対多のクラスを持ってClientCurrency
いPaymentRule
ます。
@Entity(name = "Client")
public class Client{
...
@OneToMany(mappedBy = "client")
@Fetch(FetchMode.SELECT)
@Cascade({CascadeType.ALL})
public Set<ClientCurrency> getClientCurrencies() {
return clientCurrencies;
}
}
@Entity(name = "Client_Currency")
public class ClientCurrency{
@ManyToOne
@JoinColumn(name = "client_id")
public Client getClient() {
return client;
}
@Column(name = "currency", length = 3)
@Enumerated(EnumType.STRING)
public Currency getCurrency() {
return currency;
}
}
どこでCurrency
- 一部の通貨の Enum です。今、私はClientCurrency
この方法で取得しようとしています:
public ClientCurrency get(Client client, Currency currency) {
StringBuilder hql = new StringBuilder().append("FROM ")
.append(ClientCurrency.class.getName())
.append(" WHERE client = :client AND currency = :currency");
Query query = getSessionFactory().getCurrentSession()
.createQuery(hql.toString()).setParameter("client", client)
.setParameter("currency", currency);
return (ClientCurrency)query.uniqueResult();
}
レコードがデータベース内で一意であることはわかっています。試してみましquery.list()
たが、2つの重複が返されます。何が起こっているのか知っている人はいますか?