2014-10-30 86 views
-2

我試圖得到休眠的掛鉤。 得到我的項目編譯後,我已經開始將我的類轉換爲「啓用休眠」OneToMany與2休眠類之間

目前,我有2個類 1)Person(id,name,firstname,...) 2)任務(ID,名稱,描述,idOwner)

我想有個人(ID)和任務(idOwner之間的一對多關係) 因此,當用戶從Person類獲取列表,他們會獲取與之相關的所有任務。

經過一些嘗試和失敗,這是我當前的代碼:

Person.java

@Entity 
@Table(name = "people", uniqueConstraints = { 
@UniqueConstraint(columnNames = "PERSON_ID") 
}) 
public class Person implements Serializable { 

private int id; 
private String firstName; 
private String name; 
private String function; 
private String email; 
private String password; 
private RoleEnum role; 
private List<Task> lstTasks; 

public Person(String firstName, String name, String function) { 
    this.firstName = firstName; 
    this.name = name; 
    this.function = function; 
    this.email = ""; 
    this.password = ""; 
    this.setRole(RoleEnum.User); 
} 

// <editor-fold defaultstate="collapsed" desc="Getters"> 

@Id 
@GeneratedValue(strategy = IDENTITY) 
@Column(name = "PERSON_ID", unique = true, nullable = false) 
public int getId() { 
    return id; 
} 

@Column(name = "PERSON_FIRSTNAME", unique = false, nullable = false, length = 30) 
public String getFirstName() { 
    return firstName; 
} 

@Column(name = "PERSON_NAME", unique = false, nullable = false, length = 30) 
public String getName() { 
    return name; 
} 

@Column(name = "PERSON_FUNCTION", unique = false, nullable = false, length = 30) 
public String getFunction() { 
    return function; 
} 

@Column(name = "PERSON_EMAIL", unique = false, nullable = false, length = 30) 
public String getEmail() { 
    return email; 
} 

@Column(name = "PERSON_PASSWORD", unique = false, nullable = false, length = 30) 
public String getPassword() { 
    return password; 
} 

@Column(name = "PERSON_ROLE", unique = false, nullable = false, length = 30) 
public RoleEnum getRole() { 
    return role; 
} 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "idOwner") 
public List<Task> getLstTasks() { 
    return lstTasks; 
} 

//Setters 

} 

Task.java

@Entity 
@Table(name="tasks", uniqueConstraints = 
@UniqueConstraint(columnNames = "TASK_ID")) 
public class Task implements Serializable { 

private int id; 
private String name; 
private String description; 
private int idOwner; 

public Task(int id, String name, int idOwner) { 
    this.id = id; 
    this.name = name; 
    this.idOwner = idOwner; 
} 

// <editor-fold defaultstate="collapsed" desc="Getters"> 

@Id 
@GeneratedValue(strategy = IDENTITY) 
@Column(name = "TASK_ID", unique = true, nullable = false) 
public int getId() { 
    return id; 
} 

@Column(name = "TASK_NAME") 
public String getName() { 
    return name; 
} 

@Column(name = "TASK_DESCRIPTION") 
public String getDescription() { 
    return description; 
} 

@Column(name = "TASK_ID_OWNER") 
public int getIdOwner() { 
    return idOwner; 
} 

// </editor-fold> 


//Setters 

} 

有人能告訴/顯示/解釋我究竟需要做什麼,才能做到這一點?

+0

你得到什麼問題?你的情況究竟是什麼失敗? – 2014-10-30 10:35:18

回答

0

當前您的映射應鏈接ownerId而不是Task類。

改變你的任務類此

private Person person; 


@ManyToOne 
@JoinColumn(name = "TASK_ID_OWNER") 
public Person getPerson() { 
    return person; 
} 
0

在你Person實體聲明瞭一個一對多與Task實體這樣的關係:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "idOwner") 
public List<Task> getLstTasks() { 
    return lstTasks; 
} 

在這裏,你已經給idOwnermappedBy屬性,這意味着你正在休眠狀態,在Task類中有屬性idOwner,其類型爲Person

所以,你必須修改你的Tasks類這樣的(改變變量類型從intPerson):

private Person idOwner; 

@ManyToOne 
@JoinColumn(name = "TASK_ID_OWNER") 
public Person getIdOwner() { 
    return idOwner; 
} 

public void setIdOwner(Person idOwner) { 
    this.idOwner=idOwner; 
} 

如果刪除@JoinColumn註解Hibernate就會創建一個連接表的關係,否則它只會在Task表中創建一個外鍵,外鍵列名稱爲TASK_ID_OWNER