gpt4 book ai didi

Hibernate 模式参数在@SequenceGenerator 注释中不起作用

转载 作者:行者123 更新时间:2023-11-29 11:11:47 26 4
gpt4 key购买 nike

我有以下代码:

@Entity
@Table(name = "my_table", schema = "my_schema")
@SequenceGenerator(name = "my_table_id_seq", sequenceName = "my_table_id_seq",
schema = "my_schema")
public class MyClass {
@Id
@GeneratedValue(generator = "my_table_id_seq",
strategy = GenerationType.SEQUENCE)
private int id;

}

数据库:Postgresql 8.4,Hibernate 注释 3.5.0-Final。

保存 MyClass 的对象时,它会生成以下 SQL 查询:

select nextval('my_table_id_seq')

因此没有模式前缀,因此无法找到序列。当我像

这样写 sequenceName 时
sequenceName = "my_schema.my_table_id_seq"

一切正常。

我对模式参数的含义有误解还是错误?有什么想法可以使架构参数正常工作吗?

最佳答案

同样的问题,在我看来像是一个错误。我正在使用 hibernate 3.6.7查看源代码,我看到一个方法 org.hibernate.cfg.annotations.reflection.JPAOverridenAnnotationReader#buildSequenceGeneratorAnnotation(Element element) 似乎复制了 name 的值,sequence-nameinitial-valueallocation-size 属性,但我没有看到对 catalog架构

我希望看到类似于方法 getTable(Element tree, XMLContext.Default defaults) (属于同一类)的东西

annotation.setValue("schema", table.schema());
annotation.setValue("catalog", table.catalog());`

buildTableGeneratorAnnotation

copyStringAttribute(ad, element, "catalog", false);
copyStringAttribute(ad, element, "schema", false);

因此,即使有点 hackish,解决方法 - 至少对于这个版本 - 似乎就像你说的那样在 sequenceName 前面加上前缀。

关于Hibernate 模式参数在@SequenceGenerator 注释中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com