私は休止状態で作業し、挿入時に一意のデータメンバーを強制する問題が生じていますユニークなデータメンバーに強制します。ここで休止状態:
は私の簡略エンティティオブジェクトは、次のとおりです。
ワークフロー:
@Entity
public class Workflow {
private long wfId;
private Set<Service> services;
/** Getter/Setter for wfId */
...
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "workflow_services",
joinColumns = @JoinColumn(name = "workflow_id"),
inverseJoinColumns = @JoinColumn(name = "service_id"))
public Set<Service> getServices() {
return services;
}
サービス:
@Entity
public class Service {
private long serviceId;
private String serviceName;
/** Getter/Setter for serviceId */
...
@Column(unique=true,nullable=false)
public String getServiceName() {
return serviceName;
}
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "service_operations",
joinColumns = { @JoinColumn(name = "serviceId") },
inverseJoinColumns = { @JoinColumn(name = "operationId") })
public Set<Operation> getOperations() {
return operations;
}
操作:
@Entity
public class Operation {
private long operationId;
private String operationName;
/** Getter/Setter for operationId */
@Column(unique=true,nullable=false)
public String getOperationName() {
return operationName;
}
私の問題:
私はそれぞれのオブジェクトにSUPPOSEDが何であるかを述べていますが、それは強制されていません。
は私のワークフローオブジェクトの内部では、私は一連のサービスを維持します。各サービスは、操作のリストを維持します。ワークフローは、データベースに保存されている場合、私はそれが現在使用してサービスや操作がデータベースにすでにある場合はそうならば、それはそれらの行で、関連付け自体をチェックする必要があります。
は現在、私は私のサービスおよびオペレーションテーブル内の反復を取得しています。
私は、アノテーションを使用して試してみました: @Table(uniqueConstraints)
をそれでゼロ運を持っていました。
すべてのヘルプは大一意またはuniqueConstraints属性がDBに一意性を強制するために使用されていますが、あまりにも休止状態(およびドキュメンテーションのためにそれを生成した場合、正しいDDLを作成しますが、それは議論の余地のですされていない
どのデータベースと方言を使用していますか?データベースにテーブルをどのように作成しましたか? hbm2ddl?あなたのテーブルを生成するために使用されたクエリを表示できますか? hibernateは一意性チェック自体はしないと思っていますが、データベースに固有の制約があるテーブルが生成されるはずです。 –