Error: type of annotation not applicable to this kind of declaration

I am trying to compile a Java web application that I am writing and I am getting compilation errors that I am not sure what to do with them. From the googling I did, I found this SO Question, but the trickster is using EJB and my error is in the JPA entity class.

Here's the maven build error.

[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 

And here is my user class file.

 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 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; } } 

I looked at javax.persistence.Index JavaDoc and I have the correct declaration, so I'm at a dead end here. Does anyone know what I'm doing wrong? Thank you for your time and attention.

+6
source share
1 answer

From the JavaDoc here: http://docs.oracle.com/javaee/7/api/javax/persistence/Index.html , it looks like the index annotation contains @Target(value={}) , which means it should be used as part of a complex annotation and cannot be used directly.

Quote from https://blogs.oracle.com/arungupta/entry/jpa_2_1_schema_generation , it seems that it can only be used as part of JPA annotations: "@Index - the index for the primary key is generated by default in the database. This new annotation will allow to determine additional indexes on one or more columns for better performance. This is indicated as part of @Table, @SecondaryTable, @CollectionTable, @JoinTable, and @TableGenerator "

+2
source

Source: https://habr.com/ru/post/947966/


All Articles