[英]exception while persist the JPA object
我做了一个实体类,并在ID字段上添加了注释@id
和@GeneratedValue
。 在持久化对象时,我想知道它将自动在ID字段中设置值,但是将数据提交到db时却出现了序列异常。 然后,我已经设置了ID,并坚持将其成功提交。
我再次运行我的代码,尝试使用相同的值保存数据,但出现了与复制有关的异常。
我已经搜索并使用以下内容更改了@GeneratedValue
批注:
@SequenceGenerator(name= "seq",sequenceName="seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq")
并且无需手动设置ID值即可成功持久保存数据。
所以我的问题是@GeneratedValue
和@SequenceGenerator
之间的@SequenceGenerator
是不是这两个注释用于同一目的? 以及如何在属性中使用策略?
请指导我。将不胜感激谢谢
我发现这可能对您有帮助。 从Javadoc for SequenceGenerator
定义一个主键生成器,当为GeneratedValue批注指定了生成器元素时,可以按名称引用。 可以在实体类或主键字段或属性上指定序列生成器。 生成器名称的范围对于持久性单元是全局的(跨所有生成器类型)。
我将一口气解决您的两个问题。
@SequenceGenerator
用于指向您在数据库中使用' sequenceName
'属性创建的sequenceName
,然后使用' name
'属性为其命名。 例:
@SequenceGenerator( name="myIdSeq", sequenceName="MY_ID_SEQ", allocationSize=1, initialValue=1 )
@GeneratedValue( strategy=GenerationType.SEQUENCE, generator="myIdSeq" )
请注意,此name
可以在您的持久性单元之间共享。
@GeneratedValue
定义了您希望生成ID的策略,通常我们会采用以下策略
1. IDENTITY(AUTO)会自动递增,在MySQL中很流行
2. SEQUENCE指向一个序列Gernerator,它是您在上面使用的序列。 请注意, generator
值应与@ SequenceGenerator
中的name
值匹配
3. TABLE ,该表使用专用表存储序列名称和带有运行编号的列,适用于企业级应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.