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

bd59bd6f18ded5dfadf481f4878940fd.png

前文中文编程:中文命名之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)

参考

https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值