0
我有以下類映射爲一對多:讀者和書籍,當一個讀者可以容納一個以上的書:休眠選擇一對多幫助
書:
@Entity
@Table(name = "book")
public class Book implements Serializable{
private static final long serialVersionUID = 1L;
private Long id;
private String author;
private String title;
public Book(){}
public Book(String author,String title){
this.author = author;
this.title = title;
}
@Id
@GeneratedValue
@Column(name = "BOOK_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "author")
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Column(name="title")
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
//equals and hashcode ommited.
}
讀者
@Entity
@Table(name = "reader")
public class Reader implements Serializable{
private static final long serialVersionUID = 1L;
private Long id;
private String firstName;
private String lastName;
Set<Book> set = new HashSet<Book>();
@Transient
public void loanBook(Book book){
set.add(book);
}
@Id
@GeneratedValue
@Column(name = "READER_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="firstName")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name="lastName")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name="READER_ID")
public Set<Book> getSet() {
return set;
}
public void setSet(Set<Book> set) {
this.set = set;
}
public Reader(){}
public Reader(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
}
現在我想用一些書籍ID取讀卡器類,例如:
Reader reader = service.getReaderbyBook(Long.valueOf(10));
我的功能看起來像:
@Override
public Reader getReaderbyBook(Long id) {
Session session = null;
Reader reader = null;
session =sessionFactory.openSession();
org.hibernate.Transaction tr = session.getTransaction();
tr.begin();
String hqlSelect = "Select .... where book.id:=id";
Query query = session.createQuery(hqlSelect);
query.setLong("id", id);
reader = (Reader) query.uniqueResult();
tr.commit();
session.flush();
session.close();
return reader;
}
}
如何我的HQL選擇應該是這樣,如果我只是想獲取一些書相關的單一閱讀器?
它的一對多 - 如何創建額外的表幫助? – Nilesh 2011-03-23 08:26:34
@Nilesh:讓我們假設你有一張表,主鍵爲reader_id的讀者,然後你有主表book_id的表書...現在添加另一個名爲Issued_books_by_readers,併爲讀者添加reader_id和book_id。請記住,一旦圖書被退回,請將其保存在歷史記錄表中,並刪除表格中的記錄。這是我認爲你可以在數據庫級別 – Amanpreet 2011-04-14 12:06:02
中處理1到多個這就是多對多! – Nilesh 2011-04-14 13:10:25