2010-04-09 58 views
12

我有以下代码:休眠模式参数不@SequenceGenerator注释工作

@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决赛。

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

select nextval('my_table_id_seq') 

所以没有模式前缀,因此序列不能被发现。当我写的序列号像

sequenceName = "my_schema.my_table_id_seq" 

一切正常。

我对模式参数的含义有误解吗?还是它是一个错误?任何想法如何使模式参数工作?

+0

我这里有同样的问题,并把架构上的序列名,像你这样。我的@SequenceGenerator没有模式属性。 – BrunoJCM 2011-12-26 13:53:23

回答

1

这听起来像一个错误:JPA提供商应该遵守@SequenceGenerator注释的“新”(自Java持久性2.0)schemacatalog属性。我建议筹集a Jira issue(注释和实体经理项目现在处于核心地位),找不到任何现有的项目。

-5

您好我有同样的问题

但设置你的hibernate.hbm2ddl.auto更新和运行。

<property name="hibernate.hbm2ddl.auto">update</property> 
+1

我知道这是事后的方式,但是这个答案是不正确的,因为它只会在默认架构中创建生成器,而这可能不是您想要的地方。据称在版本5.x中修复了 – Jim 2012-11-30 18:33:01

6

同样的问题在这里,看起来像一个bug给我。 I'm使用Hibernate 3.6.7 查看源代码,我看到了一个方法org.hibernate.cfg.annotations.reflection.JPAOverridenAnnotationReader#buildSequenceGeneratorAnnotation(Element element),似乎要复制的namesequence-nameinitial-valueallocation-size属性的值,但我看不出有任何引用catalogschema

我预期看到的东西类似方法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); 

所以,即使有点ha,,至少这个版本的方法似乎是像你说的那样加上sequenceName的前缀。

0

尝试将POJO的类声明中的SequenceGenerator注释移动到ID字段声明。用Hibernate 3.6。4这

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

} 

为MySQL

create table my_schema.my_table_id_seq (
    next_val bigint 
); 

insert into my_schema.my_table_id_seq values (1); 

产生这一点,这对PostgreSQL

create sequence my_schema.my_table_id_seq start 1 increment 50; 
1

同样的问题,使用Hibernate 4.3.6.Final,与Spring 4.1.4.RELEASE,在Oracle数据库11g企业版版本11.2.0.1.0上。

看起来这是一个错误=>https://hibernate.atlassian.net/browse/HHH-7232

我们得到了解决该问题通过模式B.在模式创建的代名词一个指向序列这同义词是我们在@SequenceGenerator的架构属性中使用注释

+0

:https://hibernate.atlassian.net/browse/HHH-7232?focusedCommentId=74395&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-74395 – 2017-09-17 00:02:30

4

我的解决方法是这样的(JPA 2.1,休眠4.3.8.Final和PostgreSQL 9.4):

@SequenceGenerator(name = "seq_name", sequenceName = "my_schema.seq_name", schema = "my_schema", allocationSize = 1, initialValue = 1)