tab*_*lin 15 postgresql schema hibernate sequence jpa-2.0
我有以下代码:
@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;
}
Run Code Online (Sandbox Code Playgroud)
数据库:Postgresql 8.4,Hibernate注释3.5.0-最终版.
保存MyClass的对象时,它会生成以下SQL查询:
select nextval('my_table_id_seq')
Run Code Online (Sandbox Code Playgroud)
因此没有模式前缀,因此无法找到序列.当我写sequenceName之类的时候
sequenceName = "my_schema.my_table_id_seq"
Run Code Online (Sandbox Code Playgroud)
一切正常.
我对架构参数的含义有误解吗?还是一个错误?任何想法如何使架构参数工作?
这里的问题一样,对我来说就像一个bug.I'm使用Hibernate 3.6.7查看源代码,我看到了一个方法org.hibernate.cfg.annotations.reflection.JPAOverridenAnnotationReader#buildSequenceGeneratorAnnotation(Element element),似乎要复制的值name,sequence-name,initial-value和allocation-size属性,但我看不出有任何引用catalog或schema
我希望看到类似于getTable(Element tree, XMLContext.Default defaults)(同一类的)方法的东西
annotation.setValue("schema", table.schema());
annotation.setValue("catalog", table.catalog());`
Run Code Online (Sandbox Code Playgroud)
或buildTableGeneratorAnnotation哪个
copyStringAttribute(ad, element, "catalog", false);
copyStringAttribute(ad, element, "schema", false);
Run Code Online (Sandbox Code Playgroud)
因此,即使有点hackish,至少这个版本的方式 - 似乎是sequenceName正如你所说的那样.
小智 5
我的解决方法看起来像这样(JPA 2.1,Hibernate 4.3.8.Final,PostgreSQL 9.4):
@SequenceGenerator(name = "seq_name", sequenceName = "my_schema.seq_name", schema = "my_schema", allocationSize = 1, initialValue = 1)
Run Code Online (Sandbox Code Playgroud)
小智 0
嗯,我不太了解休眠的内部结构,但这里有一些信息:
https://forum.hibernate.org/viewtopic.php?p=2406761
您还可以通过 ALTER USER ... SET SEARCH_PATH 为连接到 PostgreSQL 的用户设置默认架构
| 归档时间: |
|
| 查看次数: |
16795 次 |
| 最近记录: |