java – 为什么JPA不会自动为我的行生成一个id?
我想使用SEQUENCE策略自动生成id,但我正在打破我的头脑才能使它工作.我根本不知道为什么我不能让它发生.
这就是我做的. @Entity @SequenceGenerator(name="VlasnikSeq",sequenceName="VLA_SEQ") public class Vlasnik implements Serializable { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="VlasnikSeq") private Long id; //... 在persistence.xml中我有它映射: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="sampleAplication"> <class>entities.Vlasnik</class> <class>entities.Ljubimac</class> </persistence-unit> </persistence> 当我使用eclipses功能为实体生成表时,我得到这个: 如您所见,表已创建,但没有SEQUENCE表.
我认为下一步是尝试运行应用程序,看看我是否可以创建一些行.但是,当我试图坚持某些东西时,我得到一个例外,说:
所以我得出结论,由于某种原因,我需要该表,所以我去数据库管理的角度,我尝试执行以下查询: CREATE SEQUENCE VLA_SEQ; 但我收到以下消息:
我完全糊涂了.我不知道该怎么办.我只想在DB中创建新行时自动生成实体的ID. 这是我第一次使用glassfish 3.1,在版本3.0中我不记得,有这个问题,我甚至可以使用@GenneratedValue. 解决方法
要使用
GeneratedValue,您必须指定策略和生成器.默认情况下,策略为AUTO,生成器为空.
可用策略由GenerationType定义: public enum GenerationType { TABLE,SEQUENCE,IDENTITY,AUTO }; 最常用的方法是指定SEQUENCE或IDENTITY. >对于使用SEQUENCE的数据库(如Oracle和HSQLDB),还必须使用SequenceGenerator注释: 公共类MyClass { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQMYCLASSID") @SequenceGenerator(name="SEQMYCLASSID",sequenceName="SEQMYCLASSID") private Long id; } 如果您具有自动DDL启用,则无需创建序列,因为JPA提供程序将为您执行此操作.如果不是这样的话,你必须像这样手动完成: CREATE SEQUENCE SEQMYCLASSID; >对于不使用squences并使用Microsoft SQL Server等标识列的数据库,您需要将IDENTITY指定为策略: 公共类MyClass { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |