hibernate - 如何使测试中的一对一关系失败?

标签 hibernate grails groovy

我想建立一对一的关系并进行测试。所以我创建了两个类。

下面有两个类。


class Book {

  String title
  Date releaseDate
  String ISBN

  static belongsTo = [person:Person]
}

class Person {

  Book book;

  String name
  Integer age
  Date lastVisit

  static constraints = {
    book unique: true  // "one-to-one". Without that = "Many-to-one".
  }

}


并编写测试:
public void testOneToOne() { Person person1 = new Person(name:"person_b1", age: 99, lastVisit: new Date()) Person person2 = new Person(name:"person_b2", age: 100, lastVisit: new Date()) Book oneBook = new Book(title:"somebook", ISBN: "somebook1", releaseDate: new Date()) person1.setBook(oneBook) person1.save() person2.setBook(oneBook) person2.save() // ! c'est impossible pour 'one-to-one' }
因此,如果这是一对一的,那么我将无法将person2保存到数据库,因为一本书无法链接到更多人。那么我应该在person2.save()发生异常的同时呢?

我没有而且person2不会保存到db。那么我该如何测试-如何使测试失败?

最佳答案

unique约束用于确保一个类的一个实例只能与另一个类的单个实例连接:
http://grails.org/doc/latest/ref/Constraints/unique.html

在您的示例中,您将Book的一个实例连接到Person的两个实例,即一对多关联-因此保存应该失败。如果检查person2.errors.allErrors属性,则应该看到Person.book.unique约束已被违反。

这就是一对一关联测试的样子-person2需要一本自己的书,因为您已经声明一本书只能属于unique约束的一个人。

   public void testOneToOne() {
        Person person1 = new Person(name:"person_b1", age: 99, lastVisit: new Date())
        Person person2 = new Person(name:"person_b2", age: 100, lastVisit: new Date())

        Book oneBook = new Book(title:"somebook", ISBN: "somebook1", releaseDate: new Date())
        Book twoBook = new Book(title:"anotherbook", ISBN: "somebook2", releaseDate: new Date())

        person1.setBook(oneBook)
        assertNotNull(person1.save())

        person2.setBook(twoBook)
        assertNotNull(person2.save())
  }

看起来您实际上想要一个(书)对许多(人)的关联,因此只需忽略unique约束即可。

关于hibernate - 如何使测试中的一对一关系失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4529736/

相关文章:

spring - ApplicationEventPublisher 没有被 Autowiring 到组件中

java - 如何在指定索引处插入值?

grails - Rundeck 调度程序异常 : The Scheduler has been shutdown

java - 如何分隔以 "$"分隔的 java 字符串?

spring - 冲突的持久性单元定义异常

java - 如何将表与该表的实体类中 View 的一列连接起来

java - 为什么 grails 不能在同一个端口上运行两个应用程序?

grails - 如何在 Grails 中使用嵌入的 GORM 类?

java - 将 Netflix Zuul 与 Netflix Hystrix 相结合

xml - 如何将 XML 格式的字符串转换为 grails/groovy 中不带空格的单行 XML 字符串?