2

我必须使用表格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;
    }

}

在表书中我有 id 字段,我想加入它。比如 book.id = borrow.book_id。我得到执行:

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;
    }




}
4

1 回答 1

2

问题是您正在混合字段和属性访问。您的@Id注释在一个字段上,所以这就是 hibernate 正在寻找book的注释。从2.2.2.2 开始。访问类型

类层次结构中的注释位置必须一致(字段或属性)才能确定默认访问类型。建议在整个应用程序中坚持一个单一的注释放置策略。

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

于 2013-06-13T21:27:37.120 回答