У меня есть следующие сущности:Колонка не генерируется при использовании JoinColumn (JPA/Hibernate)
@Entity
@IdClass(IntegrationMappingPK.class)
public class IntegrationMapping {
@Id
@ManyToOne
private IntegrationProject project;
@Id
private String mappingName;
...
}
@Entity
public class MappingElement extends FlowElement {
@ManyToOne(cascade=CascadeType.PERSIST)
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="DISCOVERY_ID", referencedColumnName="DISCOVERY_ID"),
@PrimaryKeyJoinColumn(name="SCENARIONAME", referencedColumnName="SCENARIONAME"),
@PrimaryKeyJoinColumn(name="PROJECTNAME", referencedColumnName="PROJECTNAME"),
})
@JoinColumn(name="MAPPINGNAME", referencedColumnName="MAPPINGNAME")
private IntegrationMapping mapping;
...
}
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@IdClass(FlowElementPK.class)
public class FlowElement {
@Id
@ManyToOne
protected IFlow flow;
@Id
@Basic
protected String name;
@Id
@GeneratedValue
private int id;
...
}
IntegrationMapping и FlowElement разделяют полей первичного ключа "DISCOVERY_ID", "SCENARIONAME" и "Projectname" (по существу PK IntegrationProject; IFlow имеет первичный ключ, состоящий из PK IntegrationProject и имени), поэтому они зарегистрированы.
Я позволю Hibernate создать таблицы из Entities при запуске. При этом в таблице FLOWELEMENT отсутствует столбец «MAPPINGNAME».
Я также попытался использовать @PrimaryKeyJoinColumn, который приводит к созданию столбца, но пустой, хотя переменная не является.
Каков правильный способ сделать это (@JoinColumn или @PrimaryKeyJoinColumn) и почему Колонка не создана/не заполнена?
@PrimaryKeyJoinColumn используется с таблицей стратегии JOINED, когда вы использовали стратегию таблицы SINGLE. Прочтите это: https://docs.oracle.com/javaee/5/api/javax/persistence/PrimaryKeyJoinColumn.html –