Ola pessoal, tenho tido alguns problemas e gostaria de ajuda de alguém em um projeto que estou desenvolvendo, primeiramente possuo uma classe abstrata anotada como MappedSuperClass.
@MappedSuperclass
public abstract class AbstractEntity implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
//outros metodos aqui
}
uma classe Usuario que extende essa classe abstrata
@NamedQueries({
@NamedQuery(name = "Usuario.consultaLogin", query = "select u from Usuario u where u.usuario = ?1 and u.senha = ?2 ")
})
@Entity
@ManagedBean
@SessionScoped
public class Usuario extends AbstractEntity implements Serializable {
private String usuario;
private String senha;
private boolean admin;
public Usuario() {
}
//outros metodos aqui
}
Uma classe Aluno que extende a classe Usuario
@NamedQueries({
@NamedQuery(name="Aluno.retornaAluno", query="select a from Aluno a where a.nome=?1 and a.matricula=?2")
})
@Entity
@ManagedBean
@SessionScoped
public class Aluno extends Usuario implements Serializable {
private String nome;
private int matricula;
@OneToMany(cascade=CascadeType.REMOVE, mappedBy = "aluno")
private List<Avaliacao> avaliacoes = new ArrayList<>();
@Enumerated(EnumType.ORDINAL)
private Estagio estagio;
public Aluno() {
}
// outros metodos aqui
}
E a classe Avaliação que é usada na em uma ArrayList pela classe Aluno
@Entity
@ManagedBean
@SessionScoped
public class Avaliacao extends AbstractEntity implements Serializable {
@Temporal(TemporalType.DATE)
private Date data;
private float dedicacao;
private float desempenho;
private float interacao;
private float leitura;
private float nota;
@ManyToOne
private Aluno aluno = new Aluno();
public Avaliacao() {
}
//outros metodos aqui
}
E aqui meu persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="AvaliacaoPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>avaliacao.entity.Usuario</class>
<class>avaliacao.entity.Aluno</class>
<class>avaliacao.entity.Avaliacao</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dps?zeroDateTimeBehavior=convertToNull"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
e tenho tido o seguinte erro ao logar no sistema
An Error Occurred:
javax.persistence.PersistenceException:
Exception [EclipseLink-4002] (Eclipse Persistence Services -
2.6.1.v20150605-31e8258):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown
column 'DTYPE' in 'field list'
Error Code: 1054
Call: SELECT ID, DTYPE, ADMIN, SENHA, USUARIO, ESTAGIO, MATRICULA, NOME
FROM USUARIO WHERE ((USUARIO = ?) AND (SENHA = ?))
bind => [2 parameters bound]
Query: ReadAllQuery(name="Usuario.consultaLogin" referenceClass=Usuario
sql="SELECT ID, DTYPE, ADMIN, SENHA, USUARIO, ESTAGIO, MATRICULA, NOME
FROM USUARIO WHERE ((USUARIO = ?) AND (SENHA = ?))")
pelo que pude perceber o eclipseLink está encontrando algum erro ao ler a minha NamedQuery e procurar uma coluna DTYPE que não existe
antes eu estava fazendo somente a persistencia no banco de dados na tabela de usuario e estava funcionando normalmente, ao adicionar as outras classes no persist.xml de aluno e avaliações comecei a ter esse erro, essa NamedQuery agora está tentando ler os atributos da entidade Usuario e da entidade Aluno, quando devia fazer o select somente nos atributos do Usuario, que seriam usuario, senha e admin.
alguem tem alguma sugestão de como refazer a herança da classe abstrata como MappedSuperclass e as outras? de modo que não ocorra mais essa busca por uma coluna DTYPE inexistente e a NamedQuery não busque mais os campos estagio, matricula e nome, que na veradade seriam de Aluno e não de Usuario?
Desde já muito agradecido.
Atenciosamente