2014-10-02 101 views
1

我想在數據庫中存儲分層文件夾。 鐵hibernate/jpa如何存儲一個實體之間的關係

@Entity 
public class Folder { 

int id 
String name 
Folder parentFolder 

} 

因此,如果文件夾中的子文件夾,他應該存儲有關parentFolder 信息。如果文件夾位於根/頂級文件夾中,它dosnt有任何parentFolder,所以會出現空

我應該怎麼設置休眠使用註釋來實現這個?

我的實體類:

@Entity 
@Table(name="common__Role") 
public class Role { 

/** The id. */ 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
public Long id; 

/** 
* Parent Role id. 
*/ 
@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="ROLE_ID") 
public Role role; 

/** The name. */ 
@Constraints.Required 
public String name; 
+0

看到是'@ OneToMany'找到一個'@ ManyToOne'relation所以你應該處理這個如此。 – Jens 2014-10-02 08:32:34

回答

2

這應該是你的實體..

@Entity 
@Table("FOLDER") 
public class Folder { 

    @Id 
    private long id; 

    @Column(name="NAME") 
    private String name; 

    @ManyToOne(fetch=FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE }) 
    @JoinColumn(name="PARENT_ID") 
    private Folder parentFolder; 


    //Getter and Setter 
} 

也許你應該遵循this tutorial

如何堅持多對一

Folder f= new Folder(); 
f.setName("name"); 

Folder fParent = entityManager.find(Folder .class, 1L); 
f.setParent(fParent); 

entityManager.persist(f); 

this tutorial

+0

我試過了,但您的解決方案沒有解決問題。當我添加另一個文件夾,並且我選擇了parentFolder時,沒有錯誤。但是在子父母之間數據庫中沒有關係ID – masterdany88 2014-10-02 12:05:47

+0

要保存一個關係,需要一個JoinColumn否則不起作用。您應該添加一列PARENT_ID。我建議你使用JPA簡單的ManyToOne關係。 – Xstian 2014-10-02 12:11:48

+0

「你應該添加一列PARENT_ID」 - 你的意思是數據庫?我已經做到了,但只有空值。沒有關係 – masterdany88 2014-10-02 12:14:53

相關問題