我想知道如何在Hibernate上建立n:3关系。我看过很多使用注释@ManyToMany,@OneToMany ..等的例子,但它们都不是n:x,x是自然数。
你能给我一个简单的例子吗?在此先感谢关系n:3休眠
关系n:3休眠
回答
您可以使用验证器。我认为你的需求不能被视为数据库设计问题,而是一个验证问题。改用验证器。您可以编写自定义的bean验证(JSR-303),它验证元素的列表计数:
public class MyListSizeValidator implements
ConstraintValidator<MyListConstraintAnnotation, List<?> /* list of any type */ > {
public void initialize(MyListConstraintAnnotation myannotation) {
//To change body of implemented methods use File | Settings | File Templates.
}
public boolean isValid(List<?> mylist, ConstraintValidatorContext constraintValidatorContext) {
return mylist.size() < 4;
}
}
@Documented
@Constraint(validatedBy = MyListSizeValidator.class)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface MyListConstraintAnnotation {
String message() default "List is full!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
用法是这样的:
class MyCronBean {
@NotNull
@MyListConstraintAnnotation
private List<MyObject> list;
/** setters and getters */
}
UPDATE: 你可以使用JSR -303在Maven中实现“休眠验证器”:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.2.GA</version>
</dependency>
我需要导入哪些依赖项才能获得这些注释? – 2011-05-19 07:59:47
我的帖子更新了依赖。使用hibernate验证器。 – 2011-05-19 08:02:33
谢谢,也许为了让它更加灵活,我将在更高的层次上缩小这种关系,并将这个关系保留为n:m。无论如何,很好的了解验证器。非常感谢 – 2011-05-19 08:47:05
如果你不谈论Ternary associations(m:n:1),那么你需要使用@ManyToMany。
有没有可能缩小关系?我怎样才能建模?感谢您回答 – 2011-05-19 07:52:44
我不是在谈论三元关联。我需要A * ---- 3 B,A,B是实体 – 2011-05-19 07:53:53
Blanca Hdez:n:3关系只是一个m:n(由@ManyToMany完成)和一些额外的逻辑。 - 你需要自己实现这个addtionl逻辑。 – Ralph 2011-05-19 07:55:16
- 1. 休眠关系
- 2. 休眠关系
- 3. 休眠与n级关联
- 4. 休眠OneToMany关系
- 5. 休眠搜索和关系
- 6. 休眠OnetoMany的关系
- 7. 休眠关系左加入
- 8. 休眠关系JSTL问题
- 9. 了解休眠关系
- 10. 休眠一对一关系
- 11. 休眠需要manytomany关系
- 12. 春季休眠关系
- 13. 休眠关系代码
- 14. 休眠:多FK关系
- 15. 休眠@ManyToMany删除关系
- 16. 休眠一对一关系
- 17. 双向休眠关系
- 18. 休眠模式,关系
- 19. 休眠节省关系表
- 20. 休眠父子关系
- 21. 休眠删除关系manyToMany
- 22. 休眠 - 优化ManyToMany关系
- 23. 休眠@OneToMany关系映射
- 24. 休眠:更新OneToMany关系
- 25. [N]休眠会话
- 26. JPQL和使用休眠选择1:n关系
- 27. 在休眠/格姆本中获取n级深层关系
- 28. (N)休眠:与关系的核心/主映射
- 29. 休眠:配置3路多对多关系的最佳方式
- 30. 有关休眠
能否提供一些实际示例的更多详细信息?三个被引用的对象是相同的角色,还是他们有不同的角色?第一种情况你可能需要使用ManyToMany,第二种情况你可以使用三个独立的OneToMany关系。 – 2011-05-19 10:13:37