9

私が書いている Java Web アプリをコンパイルしようとしていますが、何をすべきかわからないコンパイル エラーが発生しています。 asker は 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を見て、正しい宣言を持っているので、ここで困惑しています.誰かが私が間違っていることを知っていますか? あなたの時間と配慮していただきありがとうございます。

4

1 に答える 1

3

ここの JavaDocから: http://docs.oracle.com/javaee/7/api/javax/persistence/Index.html@Target(value={})直接使用することはできません。

https://blogs.oracle.com/arungupta/entry/jpa_2_1_schema_g ​​enerationから引用すると、JPA アノテーションの一部としてのみ使用できるようです: " @Index - 主キーのインデックスはデフォルトでデータベースに生成されます。この新しいアノテーションを使用すると、パフォーマンスを向上させるために、単一または複数の列に対して追加のインデックスを定義できます。これは、@Table、@SecondaryTable、@CollectionTable、@JoinTable、および @TableGenerator の一部として指定されます"

于 2013-06-24T03:43:08.467 に答える