0
已經涵蓋了一個類似的主題,但沒有表中存在組合鍵的問題。 基本上我試圖讓一個層次樹了一個表,它具有以下結構:代表包含父ID Hibernate:使用複合鍵的單個表的父/子關係
- 四列
我的目標是使用Hibernate註解映射一個類此表,然後建立我的層次樹出來的:
@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
我我確定我在兩個協會中都缺少一些東西,但我需要你的幫助來理解問題並找到解決方案。
感謝您的幫助。
安東尼
感謝您的幫助。我試過你的代碼,但我得到以下錯誤:引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'字段列表'中的未知列'devunit0_.parentIdCategoria'。我在那裏做錯了什麼?再次感謝。 – 2011-05-19 14:15:42
@Antonio:如果您不使用Hibernate生成模式,則註釋中的列名應與模式中的列名匹配。 – axtavt 2011-05-19 15:46:30
你說得對,昨天我有點困惑:)謝謝你的幫助。我還有另外一個問題,如果你不介意的話:用一個像「FROM DevUnit」這樣的hibernate查詢,我得到一個在Enti表中所有對象的列表,其中每一個對象都有父對象和子對象的引用正確設置。我的問題是:有沒有辦法使用hibernate自動構建一個樹結構(例如,一個單一的根與其子)?我目前正在手動執行此操作,因爲出於presentatin目的,我需要一個遞歸結構,但我想知道hibernate是否可以直接處理它。 – 2011-05-20 07:51:51