我目前正在大型数据库的某些表中启用UTF-8字符.这些表已经是MS-SQL类型的NVARCHAR.另外,我还有几个使用VARCHAR的字段.
Hibernate与JDBC驱动程序的交互存在一个众所周知的问题(参见例如,在hibernate中映射到varchar和nvarchar).简而言之,Hibernate/JDBC生成的SQL将所有字符串作为Unicode传递,而不管底层的SQL类型如何.当数据库中的非unicode(varchar)字段与Unicode输入字符串进行比较时,该列的指示与编码不匹配,因此执行全表扫描.在JDBC驱动程序(JTDS和MS版本)中,有一个参数可以将Unicode字符串作为ASCII传递,但这是一个全有或全无的命题,它不允许将国际字符输入到数据库中.
我在这个问题上看到的大多数帖子都提出了两个解决方案中的一个 - 1)将数据库中的所有内容更改为NVARCHAR或2)设置sendStringParametersAsUnicode = false,我的问题是这个 - 是否有任何已知的解决方案来使用VARCHAR和NVARCHAR一起玩得很好?由于下游依赖性和其他外部问题,我的环境将一切都更改为NVARCHAR 是一个巨大的问题.
我正在使用 Hibernate 从 MS SQL 创建实体类。但是随着 NVARCHAR Hibernate 更改为 Serializable 类型。它会产生一些错误,因为当我 CRUD 时 NVARCHAR 和 Serializable 之间发生冲突!
无论如何,当 Hibernate 自动创建实体类时,必须将 Serializable 更改为 String 吗?
抱歉,我的英语技能不好,所以我在这个网站上找不到这个问题的信息。
我正在为 LUNA Eclipse 使用 JBoss 工具,我执行以下步骤:


这是 Hibernate 创建后的类
@Entity
@Table(name = "SubMenu1", catalog = "MySite")
public class SubMenu1 implements java.io.Serializable {
private byte id;
private Menu menu;
private Serializable name;
public SubMenu1() {
}
public SubMenu1(byte id, Menu menu) {
this.id = id;
this.menu = menu;
}
public SubMenu1(byte id, Menu menu, Serializable name) …Run Code Online (Sandbox Code Playgroud)