0

我是 .Net 程序员,但这次我正在处理 Java 项目,但遇到了一些困难。这个 java 项目不是我的,它是由其他开发人员开发的,它使用 Hibernate。

当我运行 Ant 构建器时,我收到此错误:

9: error: annotation type not applicable to this kind of declaration
@SequenceGenerator( name="companynameSequence" , sequenceName="COMPANYNAME_SEQUENCE" , allocationSize=1 )
^

此注释位于名为 package-info.java 的文件中。这个文件的内容就是这几行代码:

@SequenceGenerator( name="companynameSequence" , sequenceName="COMPANYNAME_SEQUENCE" , allocationSize=1 )
package com.companyname.application.model;

import javax.persistence.SequenceGenerator;

import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.TypeDef;
import org.jasypt.hibernate.type.EncryptedStringType;

如果我删除该注释项目编译成功,但我有一个运行时错误:

Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Unknown Id.generator: companynameSequence

我正在使用 Eclipse Juno 和 JRE 1.7

你能帮助我吗 ?

谢谢

4

3 回答 3

1

你需要写这样的东西:

//different annotations
class className{
        @Id
        @SequenceGenerator(sequenceName = "COMPANYNAME_SEQUENCE", name = "companynameSequence")
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="companynameSequence")
        @Column(name="ID", nullable=false, unique=true)
        private int id;
//other fields and methods
}

或这个 :

//different annotations
class className{
        @Id
        @SequenceGenerator(sequenceName = "COMPANYNAME_SEQUENCE", name = "companynameSequence")
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="companynameSequence")
        @Column(name="ID", nullable=false, unique=true)
        public int getId(){};
//other fields and methods
}

这只是示例,字段名称可能与我的不同。

并阅读这篇关于标识符和生成器的帖子

于 2013-03-25T19:06:39.207 回答
0

注释不应影响运行时行为。因此,我建议将注释注释掉并修复错误。但是,我无法解释注释的意图或为什么会引发错误。

于 2013-03-25T17:03:21.410 回答
0

我刚从 1.6 迁移到 1.8 时遇到了这个问题。这里的问题是@javax.persistence.SequenceGenerator 只针对@Target({ TYPE, METHOD, FIELD }),而不是包。在 java 1.7 之前,注释没有被正确处理是一个错误。我不知道修复是什么,但我正在寻找它。

于 2015-03-26T19:09:27.970 回答