Как ограничить количество объектов с помощью entity?

#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
     }
  

таким образом, вы можете установить предельные строки таблицы