#java #hibernate
#java #переход в спящий режим
Вопрос:
Мне было интересно, как смоделировать отношение n: 3 в режиме гибернации. Я видел много примеров использования аннотаций @ManyToMany, @OneToMany.. и т.д., но ни один из них n: x, x не является натуральным числом.
Не могли бы вы привести мне простой пример?? Заранее спасибо
Комментарии:
1. Не могли бы вы предоставить более подробную информацию о реальном примере? Являются ли три объекта, на которые даны ссылки, одной и той же ролью или у них разные роли? В первом случае вам, вероятно, придется использовать ManyToMany, во втором случае вы могли бы использовать три отношения distince OneToMany.
Ответ №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 */
}
Обновить:
вы можете использовать для реализации JSR-303 «hibernate validator» в Maven:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.2.GA</version>
</dependency>
Комментарии:
1. Какие зависимости мне нужно импортировать, чтобы получить эти аннотации??
2. мой пост был обновлен зависимостью. используйте средство проверки гибернации.
3. Спасибо, возможно, чтобы сделать его более гибким, я собираюсь сузить это отношение на более высоком уровне и оставить это как n: m . В любом случае полезно знать о валидаторе. Большое вам спасибо
Ответ №2:
Если вы не говорите о троичных ассоциациях (m: n:1), то вам нужно использовать @ManyToMany .
Комментарии:
1. Нет ли возможности сузить взаимосвязь?? Как я мог бы это смоделировать? Спасибо, что ответили
2. Я не говорю о троичной ассоциации. Мне нужен * —- 3 B, A, B являются сущностями
3. Blanca Hdez: отношение n: 3 — это просто m: n (выполненное @ManyToMany) с некоторой дополнительной логикой. — Вам нужно реализовать эту логику добавления самостоятельно.