0

会話クラスがあります

@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);

ただし、重複を生成するクエリ、データベース、または注釈の何が問題なのかを理解したいと思います。

さらに情報が必要な場合はお知らせください。

ありがとうございました。乾杯

4

0 に答える 0