Подобная тема уже была рассмотрена, но без проблемы наличия составного ключа в таблице.В основном я пытаюсь получить иерархическое дерево из одной таблицы, которая имеет следующую структуру:
- Четыре столбца, представляющие составной ключ
- Столбец, содержащий родительский идентификатор Id
- Другие столбцы
Моя цель состоит в том, чтобы сопоставить отдельный класс с этой таблицей с помощью аннотаций гибернации, а затем построить из нее дерево иерархии:
@Entity
@Table(name = "Enti")
public class DevUnit {
/** The valuable fields from the Enti table */
// Primary Key (PK) Object
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "stazione", column = @Column(name="IdStazione")),
@AttributeOverride(name = "categoria", column = @Column(name="IdCategoria")),
@AttributeOverride(name = "tipoente", column = @Column(name="IdTipoEnte")),
@AttributeOverride(name = "ente", column = @Column(name="IdEnte"))
})
private EnteDBPK EnteDBPK;
@OneToMany
@JoinColumn(name = "parentId")
private List<DevUnit> children = new ArrayList<DevUnit>();
@ManyToOne(targetEntity = DevUnit.class, optional=true, fetch=FetchType.LAZY)
@JoinColumn(name = "parenId",insertable=false,updatable=false)
private DevUnit parent = null;
// Getters and setters...
}
EnteDBPKмой составной ключ, определенный как:
@Embeddable
public class EnteDBPK implements Serializable {
private static final long serialVersionUID = 2960251547408481498L;
/** Fields representing the composite primary key*/
private long stazione;
private long categoria;
private long tipoente;
private long ente;
public EnteDBPK(){}
public EnteDBPK(long stazione, long categoria, long tipoente, long ente){
this.stazione = stazione;
this.categoria = categoria;
this.tipoente = tipoente;
this.ente = ente;
}
// Getters and setters, equals and hashcode overrides...
}
Вероятно, ассоциации определены неправильно, так как я получаю эту ошибку при попытке запустить его:
org.hibernate.AnnotationException: A Foreign key refering package.DevUnit from package.DevUnit has the wrong number of column. should be 4
Я уверенЯ что-то упускаю в обеих ассоциациях, но мне нужна ваша помощь, чтобы понять проблему и найти решение.
Спасибо за вашу помощь.
Антонио