hibernate多对一注释 - 映射异常

时间:2013-06-13 21:14:37

标签: java hibernate mapping

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




}

1 个答案:

答案 0 :(得分:2)

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

  

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

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