gpt4 book ai didi

java - Hibernate 选择一对多帮助

转载 作者:行者123 更新时间:2023-12-01 15:54:14 24 4
gpt4 key购买 nike

我将以下类映射为一对多:当一个读者可以容纳多于一本书时,读者和书籍:

书:

@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 select 应该是什么样子?

最佳答案

从 Reader r 加入 r.set book where book.id = :id

关于java - Hibernate 选择一对多帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5402306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com