关系n:3 Hibernate

时间:2011-05-19 07:45:22

标签: java hibernate


我想知道如何在Hibernate上建模n:3关系。我看过很多使用@ManyToMany,@ OneToMany等注释的例子,但是没有一个是n:x,x是一个自然数。
你能给我一个简单的例子吗?提前致谢

2 个答案:

答案 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。