当前位置: 首页 > 知识库问答 >
问题:

错误:注释类型不适用于这种声明

袁成化
2023-03-14

我正在尝试编译我正在编写的Java Web应用程序,并且我遇到了编译错误,我不知道该怎么办。从我完成的谷歌搜索中,我发现了这个SO问题,但是提问者使用的是EJB,而我的错误是在JPA实体类中。

下面是maven构建错误。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.988s
[INFO] Finished at: Mon Jun 24 02:39:51 UTC 2013
[INFO] Final Memory: 15M/247M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project donebox: Compilation failure: Compilation failure:
[ERROR] /home/cl-server/builder/tomcat-ide-builder/temp/build-1236514164814552082/src/main/java/net/donebox/accounts/User.java:[50,4] error: annotation type not applicable to this kind of declaration
[ERROR] /home/cl-server/builder/tomcat-ide-builder/temp/build-1236514164814552082/src/main/java/net/donebox/accounts/User.java:[60,4] error: annotation type not applicable to this kind of declaration
[ERROR] /home/cl-server/builder/tomcat-ide-builder/temp/build-1236514164814552082/src/main/java/net/donebox/accounts/Role.java:[53,4] error: annotation type not applicable to this kind of declaration
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

这是我的用户类文件。

package net.donebox.accounts;
import java.io.Serializable;
import java.util.UUID;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Basic;
import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Index;
import javax.persistence.ManyToMany;
import javax.persistence.JoinTable;

import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;

@Entity
@Table(name="users")
public class User {

    private UUID id;
    private String username;
    private String email;
    private String password;
    private Set<Role> roles = new HashSet<Role>();


    @Id
    @GeneratedValue
    public UUID getId() {
        return id;
    }

    public void setId() {
        this.id = UUID.randomUUID();
    }

    /**
     * Returns the username associated with this user account;
     *
     * @return the username associated with this user account;
     */
    @Basic
    @Column(length=100)
    @Index(name="idx_users_username", columnList="username") //Error here.
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Basic
    @Index(name="idx_users_email", columnList="email") // And here.
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * Returns the password for this user.
     *
     * @return this user's password
     */
    @Basic(optional=false)
    @Column(length=255)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


    @ManyToMany
    @JoinTable(name="users_roles")
    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }

}

我查看了javax.persistence.Index JavaDoc,我的声明是正确的,所以我在这里被难住了,有人知道我做错了什么吗?感谢您的时间和考虑。

共有1个答案

冉丰茂
2023-03-14

从JavaDoc这里:http://docs.oracle.com/javaee/7/api/javax/persistence/Index.html,索引注释似乎具有@Target(value={}),这意味着它应该用作复杂注释的一部分,不能直接使用。

引用自https://blogs.oracle.com/arungupta/entry/jpa_2_1_schema_generation,它似乎只能用作JPA注释的一部分:“@Index-默认情况下,在数据库中生成主键的索引。此新注释将允许在单个或多个列上定义其他索引,以获得更好的性能。它被指定为@Table、@SecondaryTable、@CollectionTable、@@JoinTable和@TableGenerator的一部分”

 类似资料:
  • 我有一个焊接限定符注释声明如下: 我的豆子界面是这样的: 合格的实现是这样的: Maven编译器说(在AccountResponseResponder.java): 我确信我错过了一些明显的东西,但它是什么逃避了我。任何帮助将不胜感激。

  • 我没有正确使用注释吗? 编译错误: 注释工作正常,可以毫无问题地访问该网页。

  • 我正在学习Spring和Data JPA。我对Ehcache有问题。我想缓存我的一个方法的返回值,该方法从数据库返回一些记录。这是一个预配置Ehcache实例的练习(我假设)。问题是,我不能使用注释@cacheable将我的方法标记为它的返回值应该被缓存的方法。我得到一个不兼容类型编译错误(Required:boolean,Found:String)。下面是我的服务层中的一个类,我认为我应该将@c

  • 2.11 和爪哇7。我正在尝试使用@XmlSchema注释我的包如下所示。 然而,我得到了这个编译错误,“注释类型不适用于这种声明” 有人知道为什么会发生这种事吗?

  • 我有一个包信息类,它以前在Java 6/7中编译。但是在Java 8中,我会遇到编译错误: * * * * *错误:批注类型不适用于这种声明@NamedNativeQueries({ 错误:注释类型不适用于这种声明@SqlResultSetMappings({***** 这是代码: 先谢谢你的帮助

  • 在编译过程中,我遇到一个错误:“注释类型不适用于这种声明”。和细节: 我使用JDK 1.6.18和@XmlElement在这个版本中不可用。我发现JAXB(它的版本)中的主要问题。它在这里被讨论: XmlElement注释用WebParam脱盐 是否可以替换JAXB实现在JavaJRE 1.6 SE中的版本?。 我使用认可的方法($JAVA_HOME/lib/认可)更新了JDK中的JAXB,但它仍