我有两个与额外列有很多关系的 Realm 类。我按照论坛中的逻辑创建了下面的 Realm 类,但在将数据保存到其他 Realm 类中时仍然遇到问题.Roylaty是在其中保存值的额外列映射表。

以下是3个域类:

class AuthorBook implements Serializable {
    Author author
    Book book
    String royalty
    boolean equals(other) {
        if (!(other instanceof AuthorBook)) {
            return false
        }
        other.author?.id == author?.id &&
        other.book?.id == book?.id
    }
    int hashCode() {
        def builder = new HashCodeBuilder()
        if (author) builder.append(author.id)
        if (book) builder.append(book.id)
        builder.toHashCode()
    }
    static AuthorBook get(long authorId, long bookId) {
        find 'from AuthorBook where author.id=:authorId and book.id=:bookId',
        [authorId: authorId, bookId: bookId]
    }
    static AuthorBook create(Author author, Book book, boolean flush = false) {
        new AuthorBook(author: author, book: book).save(flush: flush, insert: true)
    }
}
class Author implements Serializable{
    string name(nullable:false,unique:true)
    Set<Book> getBooks() {
        AuthorBook.findAllByAuthor(this).collect { it.book } as Set
    }
}
class Book implements Serializable{
    string title(nullable:false,unique:true)
    Set<Author> getAuthors() {
        AuthorBook.findAllByBook(this).collect { it.author } as Set
    }
}

在我的一个 Controller 中,我编写了以下逻辑:
def author1 = new Author("ABC")
author.save(flush:true)
def book1= new Book("GORM")
book.save(flush:true)
def authorBook = new AuthorBook(royalty:100,author:author1,book:book1)
authorBook.save(flush:true)

对于作者和书籍,它都可以按预期工作,即,它也不允许重复,并且在映射表中也不允许。它不允许重复,但我希望输出如下表所示
Author                      AuthorBook                        Book
id Name               id author_id book_id royalty            id title
1  XYZ                 1   1         1      500               1  Gorm
                       2   1         1      1000

它不会保存该值,因为即使我未在映射表中的id上设置任何复合键,它也将author_idbook_id的组合视为唯一。

我应该在映射表中进行哪些更改以允许重复?

最佳答案

您可以手动将该行插入数据库吗?我怀疑这是由您在equals上实现hashcodeAuthorBook引起的。

这两个对象是相同的:author=1;book=1;royalty=100author=1;book=1;royalty=500,因为您的相等方法仅比较作者和书籍。

关于grails - 映射表中允许与多余列进行多对多关系的重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49509354/

10-11 19:21