【问题标题】:How to specify the cardinality of a @OneToMany in EclipseLink/JPA如何在 EclipseLink/JPA 中指定 @OneToMany 的基数
【发布时间】:2011-02-11 22:36:19
【问题描述】:

我正在尝试强加@Oneto7 关联。我曾设想过一个指定目标许多值的属性,但没有找到。 如果没有这样的属性,那么在 JPA/EclipseLink 中如何实现呢?

【问题讨论】:

    标签: database jpa orm eclipselink check-constraints


    【解决方案1】:

    您可以使用 Bean Validation API (JSR-303) - Hibernate Validator 作为 RI - 并在您的集合上添加 Size 约束:

    @Size(min = 7, max = 7) protected Set<Foo> foos = new HashSet<Foo>();
    

    如果您使用的是 JPA 1.0,请查看此previous answer,了解如何在 JPA 1.0 中使用 Bean Validation。

    【讨论】:

    • 这是一个解决方案。但是,我想继续使用 EclipseLink,那里有什么解决方案吗?
    • @simpatico 嗯?我的回答中没有任何内容建议放弃 EclipseLink。我的建议是使用您在 JPA 提供程序旁边使用的 Bean Validation APIHibernate Validator 是此 API 的实现,它不是 EclipseLink 的替代品,您可以在 EclipseLink 旁边使用它。
    • 在您链接中提供的示例代码中,我阅读了 org.hibernate.ejb.HibernatePersistence,这误导了我。
    • 请回答我的相关问题:stackoverflow.com/questions/2707683/…
    • 在答案的代码中,注释被用作:@Size(min = 5, max = 20) private String author;当作者在这里最多时是什么意思?无论如何,代码还使用了Validation.buildDefaultValidatorFactory().getValidator().validate(...),这就提出了这个问题:@Size 不会在DDL SQL 中翻译吗?你能发布一个SSCCE吗?我正在尝试使用此处发布的示例vogella.de/articles/JavaPersistenceAPI/article.html,以使家庭最大人数为 7。
    【解决方案2】:

    您可以使用 Oval 库并设置例如:

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "whatevery")
    @Size(max = 30)
    private List<SuperDocument> documents;
    

    这里是进一步验证 Oval 的文档:http://oval.sourceforge.net/userguide.html#api-documentation

    【讨论】:

      猜你喜欢
      • 2011-06-22
      • 2011-08-27
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2012-08-15
      相关资源
      最近更新 更多