В моем веб-приложении у меня есть текстовая область, заполненное пользователями содержание которой в конечном счете сохраняется к дб с, в спящем режиме. Я сталкивался с проблемой это, когда ввод данных пользователем вне определенной длины, сбоев персистентности. Существует ли способ указать через, в спящем режиме Аннотации или в конфигурации, что это конкретное поле должно поддерживать более длинные строки, и что тип столбца базы данных должен отразить это?
Вот исключение, которое я получаю:
Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'introText' at row 1
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2007)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 41 more
Это не работает, так как второй параметр должен быть сопоставленным объектом, и, конечно, Integer не является постоянным классом (поскольку в нем отсутствует аннотация @ Entity).
для вас вы должны сделать следующее:
Query q = em.createNativeQuery("select id from users where username = :username");
q.setParameter("username", "lt");
List<BigDecimal> values = q.getResultList();
или если вы хотите использовать HQL вы можете сделать что-то подобное:
Query q = em.createQuery("select new Integer(id) from users where username = :username");
q.setParameter("username", "lt");
List<Integer> values = q.getResultList();
С уважением.
-121--1295405-YOu может применить логику с помощью триггера. Тогда независимо от того, как будет изменена запись, будет заполнен только один из полей.
Вы также могли бы иметь таблицу PeopleAsset и таблицу StartAsset, но у вас была бы проблема обеспечения того, что только один из них имеет запись.
-121--3909834-Можно использовать параметр length в аннотации, например,
@Column(length=1000)
, или можно изменить тип столбца на текст, если база данных поддерживает его, например:
@Column(columnDefinition="text")
Если используется обновление hbm2ddl, и столбец будет создан для использования этого типа (специфичное для базы данных).
Хорошо, это действительно ошибка БД.
Data too long for column 'introText'
Проверьте столбец IntroText в вашей БД, и это, вероятно, Varchar, который просто ограничен в размере. Вам нужно будет изменить тип хранения на что-то большее, поэтому не будет усекать ваш текст.
Если вы думаете, что это не так, вам придется показать свое сопоставление и схему.