JPA/Hibernate和现有的MS 2008数据库有问题,该数据库有一个列定义为"varchar(max)“的表。
关于varchar的MS (n=max)和额外的堆栈线程--见答案
从MSSQL2008Server复制的列定义:屏幕截图
Hbm2java生成的实体:
@Entity
@Table(name = "Log")
public class Log implements java.io.Serializable {
private String fehlerLevel;
@Column(name = "FehlerLevel", nullable = false)
public String getFehlerLevel() {用过的图书馆:
案例1:
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />本地开发机器= OK
Testserver (catalina loghost...log) =
模式-验证:在表日志中的列FehlerLevel中遇到错误的列类型;找到文本(Types#LONGVARCHAR),但期望varchar(255) (Types#VARCHAR)
案例2:
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />本地开发机器= OK
Testserver (catalina loghost...log) =
模式-验证:在表日志中的列FehlerLevel中遇到错误的列类型;找到文本(Types#LONGVARCHAR),但期望varchar(255) (Types#VARCHAR)
案例3:
更改实体,添加@Lob
@Lob
@Column(name = "FehlerLevel", nullable = false)
public String getFehlerLevel() {首先(如案例2):
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />本地开发人员机器(控制台输出)=
模式验证:在表日志中的列FehlerLevel中遇到错误的列类型;找到varchar (Types#VARCHAR),但期望文本(Types#CLOB)
Testserver = OK
__________现在在测试服务器上运行,但不在我的本地机器上运行。
案例4:
具有@Lob和2008-方言的实体(如案例1):
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />本地开发机器= OK
Testserver (catalina loghost...log) =
模式验证:在表日志中的列FehlerLevel中遇到错误的列类型;找到文本(Types#LONGVARCHAR),但期望varchar(max) (Types#CLOB)
__________ 现在它再次在本地机器上运行,而不是在testserver上运行。
这是怎么回事?
我的问题有什么解决办法?
所有的lib都将打包在war文件中,并在服务器上的“app\WEB\lib”文件夹中可用。我们的猫管理员告诉我,他们没有限制,所以这个应用程序可以使用他们自己的语言。这意味着我的本地机器和服务器之间应该没有区别。我们已经检查过了,两者都使用相同的数据库。
还有..。请有人解释一下模式验证包括了什么吗?哪些库(hibernate、db驱动程序等)被感动了吗?
如果验证失败,则消息中的差异::
查找varchar (Types#VARCHAR) -本地机器-(案例3)
找到文本(Types#LONGVARCHAR) -测试服务器-(案例1、2、4)
那么,为什么会有不同的“创建”呢?从谁那里得到了这个“发现”的信息?
发布于 2018-11-08 19:18:17
将columnDefinition = "TEXT“添加到@列描述符中是否纠正了这个问题?在我看来,数据库类型是文本,Hibernate默认为255长度字符串。听起来,本地计算机和测试服务器之间的数据库列也不完全相同。
https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/Column.html
发布于 2018-11-09 10:17:49
由于用户"UnhandledExcepSean",解决方案是:
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />和
@Column(name = "FehlerLevel", nullable = false, columnDefinition = "text")
public String getFehlerLevel() {https://stackoverflow.com/questions/53187303
复制相似问题