我是.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
你能帮帮我吗?谢谢
答案 0 :(得分: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
}
这只是示例,字段名称可能与我的不同。
并阅读有关标识符和生成器的this帖子
答案 1 :(得分:0)
注释不应影响运行时行为。因此,我建议评论注释并修复错误。但是,我无法解释注释的意图或者它为什么会抛出错误。
答案 2 :(得分:0)
我在从1.6迁移到1.8时遇到了这个问题。这里的问题是@javax.persistence.SequenceGenerator只针对@Target({TYPE,METHOD,FIELD}),而不是目标。直到java 1.7,注释没有被正确处理才是一个bug。我不知道修复是什么,但我正在寻找它。