中文命名之Hibernate 5演示 - 使用注解(annotation)而非xml定义映射-阿里云开发者社区

开发者社区> 中文编程> 正文

中文命名之Hibernate 5演示 - 使用注解(annotation)而非xml定义映射

简介: 用一个简单例子演示Hibernate 5 + MySQL基本功能中使用中文命名标识符.
+关注继续查看

2019_05_14_hibernateAnnotation

前文中文编程:中文命名之Hibernate 4+MySQL演示最后留下了个Hibernate 5之后出现的问题, 于是在Hibernate社区提交了报告: Seemingly regression since Hibernate 5: unicode support for class name in XML mapping file

开发组(Gail Badner)反应很快, 一同确认了当前稳定版5.4.2.Final和最新的6.0.0.Alpha2都有此问题, 并且基于官方测试用例重现了问题. 初步诊断病因是这个xsd约束(可以继续深究一下源头, 如果是从其他地方拷贝过来的话). 将此问题添加到了5.4版本的待修复问题列表, 并建议用注解(annotation)而不是xml配置. 经测试的确可通过注解支持与前文相同的中文命名.

完整源码在此分支: nobodxbodon/HibernateExampleZh

带注解的Java源码:

@Entity
@Table(name="客户")
public class 客户类 implements java.io.Serializable {

  private Long 客户_ID;
  private String 姓名;
  private Date 创建日期;

  public 客户类() {
  }

  public 客户类(String 姓名, Date 创建日期) {
      this.姓名 = 姓名;
      this.创建日期 = 创建日期;
  }

  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name = "客户_ID", length=20)
  public Long get客户Id() {
      return this.客户_ID;
  }

  public void set客户Id(Long 客户Id) {
      this.客户_ID = 客户Id;
  }

  @Column(name = "姓名", nullable = false, length=45)
  public String get姓名() {
      return this.姓名;
  }

  public void set姓名(String 姓名) {
      this.姓名 = 姓名;
  }

  @Column(name = "创建日期", nullable = false, length=19)
  public Date get创建日期() {
      return this.创建日期;
  }

  public void set创建日期(Date 创建日期) {
      this.创建日期 = 创建日期;
  }

  @Override
  public String toString() {
    return 客户_ID + " " + 姓名 + " " + 创建日期;
  }

}

在Hibernate配置文件中指定类, 而非xml映射文件:

        <mapping class="com.codeinchinese.客户.模型.客户类"></mapping>

期间碰到一个问题:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '客户类0_.客户Id' in 'field list'

是由于id的默认数据库列名为Id, 而数据库中使用了客户_ID作为列名. 添加如下注解后解决:

  @Column(name = "客户_ID", length=20)

参考

Chapter 2. Mapping Entities

org.hibernate.MappingException: Unknown entity: annotations.Users

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Using Validation Annottions 使用验证
You can use four attributes in the DataAnnotations namespace to cover common validation scenarios. Required    特性 Like all the built-in validation a...
719 0
Loadrunner中web_find和web_reg_find函数的使用与区别
总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find();这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:一、web_find()函数该函数的作用是“从HTML页面中查找指定的文本字符串”常用参数及含义如下: 1 web_...
887 0
使用loadrunner进行压力测试之----post请求
1. 发送post请求时使用web_submit_data  如: 1 web_submit_data("create",//事务名 2 "Action=http://bizhi.
820 0
jQuery EasyUI API 中文文档 - 数字框(NumberBox)
NumberBox 数字框 扩展自 $.fn.validatebox.defaults,用 $.fn.numberbox.defaults 重写了 defaults 。 依赖 validatebox 用法 1. 1. $('#nn').numberbox({   2.     min:0,   3.     precision:2   4. });  特性 其特性扩展自 validatebox,下列是为 numberbox 增加的特性。
887 0
android自定义xmls文件属性
<p style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px"> 在使用到自定义View的xml布局文件中需要加入xmlns:前缀=<a target="_blank" href="http://schemas.android.com/apk/res/%E4%BD%A0%E7%9A%8
758 0
+关注
中文编程
中文编程知乎专栏: https://zhuanlan.zhihu.com/codeInChinese 中文编程GitHub组: https://github.com/program-in-chinese
142
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载