I'm trying to compile a Java web app that I'm writing, and I"m getting compile errors that I'm not sure what to do with. From the googling I've done, I found this SO question, but the asker is using EJB, while my error is in a 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's 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'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;
}
}
I looked at the javax.persistence.Index JavaDoc, and I have the declaration correct, so I'm stumped here, Does someone know what I'm doing wrong? Thank you for your time and consideration.
From the JavaDoc here: http://docs.oracle.com/javaee/7/api/javax/persistence/Index.html, it seems that Index annotation has @Target(value={})
which means it should be used as a part of complex annotation and can't be used directly.
Quoting from https://blogs.oracle.com/arungupta/entry/jpa_2_1_schema_generation, it seems that it can be used only as part of JPA annotations: "@Index - An index for the primary key is generated by default in a database. This new annotation will allow to define additional indexes, over a single or multiple columns, for a better performance. This is specified as part of @Table, @SecondaryTable, @CollectionTable, @JoinTable, and @TableGenerator"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With