Отношения n: 3 Hibernate - PullRequest
0 голосов
/ 19 мая 2011


Мне было интересно, как смоделировать отношения n: 3 в Hibernate. Я видел много примеров, использующих аннотации @ManyToMany, @OneToMany ... и т. Д., Но ни один из них не n: x, x натуральное число.
Не могли бы вы дать мне простой пример? Заранее спасибо

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Вы можете использовать валидаторы.Я думаю, что ваше требование не может рассматриваться как проблема проектирования базы данных, а как проблема проверки.используйте вместо этого валидатор.Вы можете написать свой собственный валидатор компонента (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 */
}

ОБНОВЛЕНИЕ: вы можетеиспользовать для реализации JSR-303 «средство проверки гибернации» в Maven:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.0.2.GA</version>
</dependency>
0 голосов
/ 19 мая 2011

Если вы не говорите о троичных ассоциациях (m: n: 1), тогда вам нужно использовать @ ManyToMany.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...