У меня есть простой EntityBean с аннотацией @Lob
. Если я удалю эту аннотацию, я не получу никаких ошибок на JBossAS 6.0.0.Final и MySQL5. Но если я аннотирую его с @Lob
(потому что mt
содержит от 100 до 5000 символов в моем случае), я получаю ошибки в моей тестовой среде, если я сохраняю сущность.
@Lob
: mt
отображается на VARCHAR @Lob
: mt
сопоставлен с LONGTEXT (это то, что я хочу, но я получаю ошибки)Это моя сущность:
@Entity
@Table(name = "Description")
public class Description implements Serializable
{
public static final long serialVersionUID=1;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Lob
private String mt;
} // ... getter/setter
Ошибка здесь:
...
Caused by: org.hibernate.exception.GenericJDBCException: could not insert
[my.Description]
...
Caused by: java.sql.SQLException: Connection is not associated with a managed
connection.org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@3e4dd
...
Я действительно не знаю, почему я получаю эту (воспроизводимую) ошибку. Среда вроде бы в порядке, многие другие тесты пройдены, и он даже работает без аннотации @Lob
.
Этот вопрос относится к JPA: как мне сохранить строку в поле базы данных, тип MYSQL Text, где использование @Lob
для JPA/MySQL является общепринятым ответом.
Обновление 1 Ошибка выше зависит от ОС. На машине W7 у меня нет проблем с @Lob
, на OSX Lion всегда ошибка. Я попробую обновить MySQL и драйвер.
Обновление 2 Предложенный Kimi обходной путь с @Column(columnDefinition = "longtext")
работает отлично, даже на OSX. В обоих случаях MySQL создает один и тот же столбец: LONGTEXT.
Обновление 3 Я обновил MySQL до mysql-5.5.17-osx10.6-x86_64
и коннектор до mysql-connector-java-5.1.18
. Все та же ошибка.