会話クラスがあります
@Id
@GeneratedValue
private Long id;
@Column(name = "Subject", length = 50)
private String subject;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@Column(name = "SentTime")
private Date date;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "Conversation_ConversationParticipants",
joinColumns = @JoinColumn(name = "ConversationID"), inverseJoinColumns = @JoinColumn(name = "ConversationParticipantID"))
private List<ConversationParticipant> participants;
@OneToMany(cascade = CascadeType.ALL)
@OrderBy("timeEntry desc")
@JoinTable(name = "Conversation_ConversationLogs",
joinColumns = @JoinColumn(name = "ConversationID"), inverseJoinColumns = @JoinColumn(name = "ConversationLogID"))
private List<ConversationLog> logs;
私は次のHibernateコードを持っています
@Override
public List<ConversationLabel> retrieve(User user) {
Criteria criteria = super.createCriteria();
criteria.add(Restrictions.eq("user", user));
return (List<ConversationLabel>) criteria.list();
}
データベースには、1 人のユーザーと 1 つの会話の両方を指す 2 つのラベルがあります。彼らが指しているユーザーは同じユーザーですが、会話は異なります。
言い換えれば、クエリは 2 行を返す必要がありますが、取得するのは 4 行です。
を使用してこの問題を防ぐ方法を知っています
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
ただし、重複を生成するクエリ、データベース、または注釈の何が問題なのかを理解したいと思います。
さらに情報が必要な場合はお知らせください。
ありがとうございました。乾杯