が、私はかなり簡単な1対多の関係を持って設定し得ていないHibernateは多くの1つの外部キーが
[SampleAliasMask] has many [SampleAliasMaskPart]
私の問題は、私は、コレクションの部品でSampleAliasMaskの新しいインスタンスを永続化するとき私が得ることですSampleAliasMaskPartのテーブルからSampleAliasMaskへの外部キーリンクがNULLに設定されているという制約違反です。
私は、次のような注釈を休止状態使用してマッピングしています:
@Entity
@Table(name="SAMPLE_ALIAS_MASK")
public class SampleAliasMask extends ClientEntity {
@OneToMany(mappedBy = "sampleAliasMask", fetch = FetchType.EAGER, cascade = javax.persistence.CascadeType.ALL, orphanRemoval = true)
@Cascade(CascadeType.ALL)
@Length(min = 1, message = "The sample alias mask must have components")
private Set<SampleAliasMaskPart> components;
ようにマッピングされた関係の他の半分:
@Entity
@Table(name="SAMPLE_ALIAS_MASK_PART")
public class SampleAliasMaskPart extends ClientEntity {
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "SAMPLE_ALIAS_MASK_ID", nullable = false)
private SampleAliasMask sampleAliasMask;
ClientEntityの関連部分が
@MappedSuperclass
public abstract class ClientEntity {
@Id
@Column(name="ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
です
私はこのような部分を作成しています:
HashSet<SampleAliasMaskPart> components = new HashSet<>();
for(Map<String, Object> c : this.components) {
SampleAliasMaskPart component = new SampleAliasMaskPart(Integer.parseInt(c.get("value").toString(), 10), c.get("name").toString());
result.validate(component);
components.add(component);
}
mask.setComponents(components);
私が手に正確なエラーは次のとおりです。
java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("ST"."SAMPLE_ALIAS_MASK_PART"."SAMPLE_ALIAS_MASK_ID")
私は、問題は、私が明示的にSampleAliasMaskPart.sampleAliasMask設定されていないという事実に関係している疑いがあるが、私はその理由をする必要がありますか?その関係は決して公開されず、ナビゲートされません。そのフィールドはマッピング目的のためだけにあり、私はこれを間違ってマッピングしていると思います。
あなたの質問には答えられないが、あなたが知りたいと思ったので、コメントとして追加する。 '@ Length'は文字列の長さを検証します。代わりに '@ Size'が必要です。 –
ありがとう、それは私が望んでいた、はい –