我有一个带有@Lob
注释的简单 EntityBean。如果我删除此注释,我在 JBossAS 6.0.0.Final 和 MySQL5 上不会出现错误。但是,如果我用它注释@Lob
(因为mt
在我的情况下包含大约 100 到 5000 个字符),如果我坚持实体,我会在我的测试环境中得到错误。
- 没有
@Lob
:mt
映射到 VARCHAR - with
@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 有关:如何将 String 持久化到数据库字段中,键入 MYSQL Text,其中使用@Lob
for 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
. 还是同样的错误。