hibernate学习小记

来源:互联网 发布:淘宝定制品可以退货吗 编辑:程序博客网 时间:2024/05/28 18:43
ava.lang.ClassCastException: org.hibernate.hql.internal.ast.tree.SqlNode cannot be cast to org.hibernate.hql.internal.ast.tree.PathNode

这个问题是 order是sql关键字 hql语句忽略大写下 所以hql不能分辨是sql的关键字还你的表,所以要添加绝对路径导入表名。

Hibernate注解——属性级别注解,@Id I

Ps1:对于复合主键,实体类必须实现serializable接口(声明式接口,不需要实现任何方法)。
Ps2:将 String类型 的属性设置成主键是一定要指定该属性的长度,可以用 Column length 注解来指定,不然 MySQL 会默认让其长度为255,而 MySQL 主键的长度不允许太长。(即使,Ps1成功实现,但是如果Ps2不通过,即使Junit变为绿条,表也可能创建不成功)。
备注:有些版本String类型的主键不限制长度也能生成表结构。

Hibernate注解——属性级别注解,@GeneratedValue III

Ps1:对于 MySQL 来讲,@GeneratedValue == @GeneratedValue(strategy=GenerationType.AUTO)。
Ps2:主键是字符串,主键生成策略就为手工赋值,不能用JPA提供的主键生成策略,要用Hibernate提供的主键生成器,其中GenericGenerator(name)与generaotr中的值对应,assigned就是手工赋值。否则使用AUTO的话即使长度也规定了,运行也通过了,但是还是生成不了表。
PS3:使用string类型作为主键,不用generatedvalue的默认值,需要给它生成一个generator,指定手工生成策略。而且需要给它的主键设定大小,255已超过最大的长度。

@Id    @Column(length=8)    @GeneratedValue(generator="sid")    @GenericGenerator(name="sid",strategy="assigned")    //GenericGenerator(name)与generaotr中的值对应,assigned表示手工赋值    //private int id;    private String id;
0 0
原创粉丝点击