【问题标题】:Annotation @SequenceGenerator and compilation error注解@SequenceGenerator 和编译错误
【发布时间】:2013-03-25 16:57:57
【问题描述】:

我是 .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

你能帮帮我吗?

谢谢

【问题讨论】:

    标签: java eclipse hibernate annotations


    【解决方案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 关于标识符和生成器的帖子

    【讨论】:

    • 谢谢,但我在 package-info.java 文件中没有任何“类”。只有“包”声明和一些导入。
    • @user2208393 你的堆栈跟踪告诉它找不到这样的序列。检查您的完整堆栈跟踪,我认为您找到了使用此序列的类并在那里添加 @SequenceGenerator 注释
    【解决方案2】:

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

    【讨论】:

    • 不幸的是,如果我将注释注释掉,我会收到此异常:Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Unknown Id.generator: companynameSequence
    • @user2208393 抱歉,我帮不了你。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      相关资源
      最近更新 更多