У меня есть классическая связь «один ко многим», и при сохранении ее с помощью Hibernate я не могу передать значение столбца PK родителя в столбец FK дочернего элемента.
Родительский класс
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int holdingPK;
@OneToMany(mappedBy="holding",targetEntity=PolicyType.class,fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@XmlElement(name = "Policy")
private Set<PolicyType> policy;
Дочерний класс
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int policyPK;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="HoldingFK",nullable = false)
private HoldingType holding;
Здесь HoldingPK
— автоматически сгенерированный столбец последовательности, представляющий первичный ключ. Значение генерируется, когда я вставляю удерживающую строку. Поэтому я хочу передать значение HoldingPK в дочерний столбец HoldingFK
на лету.
Проверочный код
HoldingType obj = new HoldingType();
obj.setCurrencyTypeCode("6");
obj.setHoldingKey("123");
Set<PolicyType> set = new TreeSet<PolicyType>();
PolicyType policy = new PolicyType();
policy.setJurisdiction("Haha");
set.add(policy);
obj.setPolicy(set);
session.save(obj);
transaction.commit();
Таким образом, я могу передать другие значения ребенка в столбец дочерней таблицы, просто родительский PK не достигает столбца FK ребенка.
Здесь я сохраняю значения XML-документа в базу данных. Для этого я упорядочиваю XML в объекты Java, используя JAXB, а затем сохраняю объекты, используя Hibernate. Таким образом, я повторно использую сгенерированные JAXB классы с Hibernate, и эти элементы PK и FK не существуют в XML. Они относятся к базе данных.