2013-03-25 76 views
0

我是.Net程序员,但这次我正在开发Java项目,并遇到一些困难。 这个java项目不是我的,它是由其他开发人员开发的,它使用Hibernate。Annotation @SequenceGenerator和编译错误

当我运行Ant构建我收到此错误:在一个名为package-info.java

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

此注释。该文件的内容的代码只是这几行:

@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朱诺和JRE 1.7

你能帮我吗?

谢谢

回答

0

注解不应影响运行时行为。因此,我建议评论注释并修复错误。然而,我不能解释注释的意图或为什么会引发错误。

+0

不幸的是,如果我注释掉注释,我收到这个异常: '调用init方法失败;嵌套异常是org.hibernate.AnnotationException:未知Id.generator:companynameSequence' – user2208393 2013-03-25 17:10:12

+0

@ user2208393对不起,我帮不了你。 – raptortech97 2013-03-25 17:13:57

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后有关标识符和发电机

+0

谢谢,但我在package-info.java文件中没有任何“class”。只有“包”声明和一些导入。 – user2208393 2013-03-26 09:27:15

+0

@ user2208393你的堆栈跟踪告诉它找不到这样的序列。检查你的完整堆栈跟踪,我认为你找到你使用这个序列的类,并在那里添加'@ SequenceGenerator'注释 – 2013-03-26 09:42:58

0

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