У меня довольно прямое отношение «один ко многим»
[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, но зачем мне это нужно?Эти отношения никогда не подвергаются и не подвергаются воздействию.Это поле предназначено только для целей отображения, что заставляет меня думать, что я отображаю это неправильно.