0

コンテキスト: Secret_Agent と Secret_Mission の 2 つのテーブルがあります。@ManyToMany同じ秘密の任務を実行するために多くの秘密のエージェントを与えることができ、同じ秘密のエージェントに多くの秘密の任務を与えることができるため、両者は互いに関係があります。

Table SECRET_AGENT

Columns SecretAgentId, SecrentAgentName

Table SECRET_MISSION

Columns SecretMissionId, SecrentMissionName

JOIN Table

SECRET_AGENT_MISSION

Columns: SecretAgentId,SecretMissionId

Java コード:

class Secret_Agent {
.
.
.

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "SECRET_AGENT_MISSION", joinColumns = { @JoinColumn(name = "SecretAgentId") }, inverseJoinColumns = { @JoinColumn(name = "SecretMissionId") }
private List <Secret_Mission> missions;
.
.
.
}

class Secret_Mission {
.
.
.

@ManyToMany(mappedBy = "missions")
private List <Secret_Agent> agents;
.
.
.
}

問題: 以下のコードで、Hibernate Criteria によって割り当てられたシークレット ミッションを持たないすべてのシークレット エージェントをフェッチしようとしています。

Criteria criteria = session.createCriteria(Secret_Agent.class);

criteria.add(Restrictions.isNull("missions"));

しかし、うまくいきません。その間、Projections と QBE で運試しをしています。

もう 1 つの方法は、Crieteria Association を使用することですが、Association は@OneToManyand @ManyToOne!

ここで私を助けてください。

4

1 に答える 1

1

あなたのマッピングが正しいと仮定しています:使用Restrictions.isEmpty("missions") - Constrain a collection valued property to be empty(javadocから)

PS: Hibernate では、次のようにマッピングでコレクションを初期化することをお勧めします。

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "SECRET_AGENT_MISSION", joinColumns = { @JoinColumn(name = "SecretAgentId") }, inverseJoinColumns = { @JoinColumn(name = "SecretMissionId") }
private List <Secret_Mission> missions = new ArrayList<Secret_Mission>();

同じことを行いますSecret_Agent.agents

于 2013-08-08T06:05:44.370 に答える