我使用Hibernate 4.0.0.Final作为应用程序的JPA持久性提供程序,其中包含Oracle 11g数据库(使用UTF-8编码创建)和Oracle WebLogic 11g作为应用服务器。在persistence.xml
中配置的方言是org.hibernate.dialect.OracleDialect
。JPA中的长度属性映射不正确@column
在我的实体,我很喜欢这种映射字符串字段:
@Column(length=20)
private String description;
我让JPA处理在数据库中的表的创建。令我惊讶的是,在数据库中的一字段列定义是这样的:
DESCRIPTION VARCHAR2(80 BYTE)
当我插入的description
字段中的值(使用SQL控制台,而不是从应用程序),我可以插入了到80个字符,而不是我预期的20个字符。
这里有什么问题?我想列定义是用80个字节创建的,以允许存储UTF-8字符,但它与数据库级预期的最大字段长度混淆。理想情况下,我想现场看起来像这样:
DESCRIPTION VARCHAR2(20 CHAR)
但我不知道该如何与CHAR
,而不是映射一个字符串字段配置Hibernate。有任何想法吗?
嗨奥斯卡,我也面临同样的问题。我知道OracleDialect会默认创建字节类型,但列的大小是如何从20增加到80的呢?它应该是20个字节的权利? – 2013-03-29 09:36:41
20个字符== 80个字节,每个字符占用4个字节 – 2013-03-29 16:02:13