0

私はクラスのコメントを持っています:

@Entity
@Table(name = Constants.COMMENTS_TABLE)
@Audited
public class Comment {


@Column(name = "comment", nullable = false)
private String comment;

@ElementCollection(targetClass = CommentTopic.class)
@Enumerated(EnumType.STRING)
@Fetch(value = FetchMode.JOIN)
@CollectionTable(name = Constants.COMMENTS_TOPIC_JOIN_TABLE, joinColumns = @JoinColumn(name = "comment_id"))
@Column(name = "topic")
private Set<CommentTopic> commentTopics;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "comment_id", nullable = false)
private Long commentId;
}

コメント クラスの永続化は機能しますが、次の基準クエリは機能します。

Criteria criteria = session.createCriteria(Comment.class)
         .add(Restrictions.eq("commentTopics", topic));

List<Comment> entries = criteria.list();

org.hibernate.exception.DataException: No value specified for parameter 1 をスローします。

これは構築されたクエリです:

this_.comment_id を comment1_0_0_ として、this_.comment を comment0_0_ として、commenttop2_.comment_id を comment1_0_2_ として、commenttop2_.topic を topic2_ として選択します。

間違った注釈を使用していませんか?

条件クエリが正しく構築されていませんか?

4

1 に答える 1

0

CommentTopic 列挙型を CommentTopicWrapper クラスに配置しました。

commentTopicsSet の注釈を次のように更新しました。

@OneToMany(targetEntity = CommentTopicWrapper.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = Constants.COMMENTS_TOPIC_JOIN_TABLE, joinColumns = @JoinColumn(name = "comment_id"), inverseJoinColumns = @JoinColumn(name = "topic"))
private Set<CommentTopicWrapper> commentTopics;
于 2013-07-02T18:45:37.053 に答える