gpt4 book ai didi

java - hibernate 多对一注释 - 映射异常

转载 作者:行者123 更新时间:2023-11-30 09:21:11 25 4
gpt4 key购买 nike

我必须使用表 bookborrow 并且我想在我的 Borrow 类方法中获取 Book。我有这样的东西:

    @Entity
@Table(name="borrow")
public class Borrow {
@Id
@Column(name="ID")
@GeneratedValue
private Long id;

@Column(name="book_id")
private long bookId;

@Column(name="user_id")
private long userId;

@Column(name="borrow_date")
private Date borrowDate;

@Column(name="return_date")
private Date returnDate;

private Book book;

public long getBookId() {
return bookId;
}

public void setBookId(long bookId) {
this.bookId = bookId;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@ForeignKey(name = "id")
public Book getBook() {
return this.book;
}

public void setBook(Book book) {
this.book = book;
}

public long getUserId() {
return userId;
}

public void setUserId(long userId) {
this.userId = userId;
}

public Date getBorrowDate() {
return borrowDate;
}

public void setBorrowDate(Date borrowDate) {
this.borrowDate = borrowDate;
}

public Date getReturnDate() {
return returnDate;
}

public void setReturnDate(Date returnDate) {
this.returnDate = returnDate;
}

}

在 table book 中我有 id 字段,我想通过它加入。比如 book.id = borrow.book_id。我得到异常(exception):

Could not determine type for: Book, at table: borrow, for columns: [org.hibernate.mapping.Column(book)]

图书类:

    @Entity
@Table(name="book")
public class Book {
@Id
@Column(name="ID")
@GeneratedValue
private Long id;

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

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

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

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

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

@Column(name="book_url")
private String bookUrl;

@Column(name="review_url")
private String reviewUrl;

@Column(name="status_id")
private int status;

@Column(name="accepted")
private boolean accepted;

@Column(name="in_library")
private boolean inLibrary;

@Column(name="user_id")
private long userId;

public long getUserId() {
return userId;
}

public void setUserId(long userId) {
this.userId = userId;
}

public boolean isAccepted() {
return accepted;
}

public void setAccepted(boolean accepted) {
this.accepted = accepted;
}

public boolean isInLibrary() {
return inLibrary;
}

public void setInLibrary(boolean inLibrary) {
this.inLibrary = inLibrary;
}

public Book(long l, String string) {
this.title = string;
this.id = l;
}


public Book() {
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

public String getIsbn() {
return isbn;
}

public void setIsbn(String isbn) {
this.isbn = isbn;
}

public String getYear() {
return year;
}

public void setYear(String year) {
this.year = year;
}

public String getPublisher() {
return publisher;
}

public void setPublisher(String publisher) {
this.publisher = publisher;
}

public String getBookUrl() {
return bookUrl;
}

public void setBookUrl(String bookUrl) {
this.bookUrl = bookUrl;
}

public String getReviewUrl() {
return reviewUrl;
}

public void setReviewUrl(String reviewUrl) {
this.reviewUrl = reviewUrl;
}

public int getStatus() {
return status;
}

public void setStatus(int status) {
this.status = status;
}




}

最佳答案

问题是您混合了字段访问和属性访问。您的 @Id 注释在一个字段上,因此 hibernate 正在寻找 book 的注释。来自 2.2.2.2. Access type :

The placement of annotations within a class hierarchy has to be consistent (either field or on property) to be able to determine the default access type. It is recommended to stick to one single annotation placement strategy throughout your whole application.

因此,要么保持注释一致(推荐),要么使用该部分其余部分描述的方法来覆盖 book 的访问类型(例如,通过使用 @Access注解)

关于java - hibernate 多对一注释 - 映射异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17097209/

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