#java #hibernate
#java #спящий режим
Вопрос:
С помощью Hibernate поставщика сохраняемости, как ограничить количество объектов с помощью entity Предположим, что у нас есть Address
объект, как ограничить, что у нас может быть только 10 адресов для пользователя?
Я хочу ограничить это на уровне сущности.
Ответ №1:
аннотируйте максимальное количество дочерних объектов, разрешенных с помощью @Size
аннотации
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Size(max = 2)
private List<Child> children;
Если дочерние элементы превысили лимит, он будет сброшен ниже Exception
во время сохранения
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [org.myapp.Parent] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='size must be between 0 and 2', propertyPath=childs, rootBeanClass=class org.myapp.Parent, messageTemplate='{javax.validation.constraints.Size.message}'}
]
также вы можете указать min
количество объектов.
необходимо включить нижеприведенную зависимость в pom, если используется режим гибернации
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>{hibernate.version}</version>
</dependency>
Комментарии:
1. Спасибо! Но откуда взялась аннотация @Size?
2. На самом деле, я хочу, чтобы мы могли вставить только 10 записей адресов. Возможно ли это с помощью @Size?
3. @ZhijieLiu
min=10, max=10
для сохранения только записей, имеющих 10 адресов,min=0, max=10
для сохранения записей, имеющих адреса от 0 до 10
Ответ №2:
если вы используете mysql, это может помочь вам для серверной части (базы данных).
ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
для интерфейса
List<entity> list=new ArrayList<entity>();
if(list.size()>10){
//some condtions
}
таким образом, вы можете установить предельные строки таблицы