public class BookType {
private Long id;
private String name;
private BookType parent;
//getter && setter
}
但如果這個是一個JPA類就出問題了。因為parent沒有寫注釋。在jpa自動創(chuàng)建表是會認為這是一個字節(jié)類型的。所以還應該為parent些上一個注釋。既然是自連。應該寫@OneToOneprivate Long id;
private String name;
private BookType parent;
//getter && setter

}
這里就要注意了。OneToOne不能寫其他屬性,比如不能這樣寫
@OneToOne(targetClass=BookType.class)
這樣的話在系統(tǒng)自動生成數(shù)據(jù)表時會報錯。也不能加 @JoinColumn。唯一的辦法就是只要@OneToOne。其他什么都不寫。這樣就不會報錯了。代碼如下:
public class BookType {
private Long id;
private String name;
@OneToOne
private BookType parent;
//getter && setter
}
private Long id;
private String name;
@OneToOne
private BookType parent;
//getter && setter
}
另外:如果想不讓某個屬性不被轉(zhuǎn)換成數(shù)據(jù)庫字段。需要在此屬性的getter方法上加@Transient注釋。比如BookType的fullName屬性。
例子:
/**
* 獲取包括父節(jié)點名稱的全部路徑
* @return
*/
@Transient
public String getFullName(){
StringBuffer buffer=new StringBuffer("");
if(parent!=null){
buffer.append(parent.getFullName());
buffer.append("-");
}
buffer.append(name);
return buffer.toString();
}
* 獲取包括父節(jié)點名稱的全部路徑
* @return
*/
@Transient
public String getFullName(){
StringBuffer buffer=new StringBuffer("");
if(parent!=null){
buffer.append(parent.getFullName());
buffer.append("-");
}
buffer.append(name);
return buffer.toString();
}