我想知道如何在Hibernate上建模n:3关系。我看过很多使用@ManyToMany,@ OneToMany等注释的例子,但是没有一个是n:x,x是一个自然数。
你能给我一个简单的例子吗?提前致谢
答案 0 :(得分:1)
您可以使用验证器。我认为您的要求不能被视为数据库设计问题,而是验证问题。改为使用验证器。您可以编写自定义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 */
}
更新: 您可以在Maven中使用JSR-303实现“hibernate验证器”:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.2.GA</version>
</dependency>
答案 1 :(得分:0)
如果你不谈论Ternary associations(m:n:1),那么你需要使用@ManyToMany。