2013-06-24 29 views
6

私が書いているJava Webアプリケーションをコンパイルしようとしていますが、コンパイルエラーが発生するとわかりません。私はthis SO質問を見つけましたが、私のエラーがJPAエンティティクラスにあるときアスカーは、EJBを使用している、やったグーグル。エラー:この種類の宣言には、注釈タイプは適用されません

はここで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を見ました。私は正しい宣言をしていますので、ここで困惑しています。誰かが間違っていることを知っていますか?あなたの時間と配慮していただきありがとうございます。

+0

として定義されています(また、JDO永続性specはその方法をサポートしていますが、インデックスを指定する他の方法の中でも)、XXXTableアノテーションを使用してJPAでインデックスを指定することができます(user2507946 replyを参照してください) – DataNucleus

答えて

2

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 - 主キーのインデックスがデータベースにデフォルトで生成されたこの新しいアノテーションは追加のインデックスを定義することができます。 @TableGenerator "

関連する問題