0

Clientは と 1 対 1 の 1 対多のクラスを持ってClientCurrencyPaymentRuleます。

  @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つの重複が返されます。何が起こっているのか知っている人はいますか?

4

1 に答える 1

0

"SELECT DISTINCT c FROM <CC.class.getName()> c ..."クエリが重複を返す理由は完全にはわかりませんが、次のようにクエリを作成することで回避できるはずです(SQLで行う方法と同様)。

于 2012-08-08T14:18:59.947 に答える