Проблема, сохраняющая длинные строки с, в спящем режиме

В моем веб-приложении у меня есть текстовая область, заполненное пользователями содержание которой в конечном счете сохраняется к дб с, в спящем режиме. Я сталкивался с проблемой это, когда ввод данных пользователем вне определенной длины, сбоев персистентности. Существует ли способ указать через, в спящем режиме Аннотации или в конфигурации, что это конкретное поле должно поддерживать более длинные строки, и что тип столбца базы данных должен отразить это?

Вот исключение, которое я получаю:

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
7
задан mshafrir 22 January 2010 в 03:06
поделиться

2 ответа

Это не работает, так как второй параметр должен быть сопоставленным объектом, и, конечно, 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, и столбец будет создан для использования этого типа (специфичное для базы данных).

21
ответ дан 6 December 2019 в 06:50
поделиться

Хорошо, это действительно ошибка БД.

Data too long for column 'introText'

Проверьте столбец IntroText в вашей БД, и это, вероятно, Varchar, который просто ограничен в размере. Вам нужно будет изменить тип хранения на что-то большее, поэтому не будет усекать ваш текст.

Если вы думаете, что это не так, вам придется показать свое сопоставление и схему.

0
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: