1) protected Integer permissao; - Esse campo aparece em outras classes? Se sim, deixa só na superclasse pq é bizarro você retirar e ele criar assim mesmo. Se você eliminar de tudo, veja c não tem EAR/WAR antigo no seu servidor e vc está sendo vítima de cache.
2) @Column(updatable = false, insertable = false, name = "permissao") se vc deixa esse valor, ele deveria dar erro na hora do update. Não deveria nem funcionar, sério mesmo.
Não sei se entendi direito o que você quis dizer, mas é o seguinte. se eu coloco a classe assim:
@Entity
@Table(name = "usuario")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "permissao", discriminatorType = DiscriminatorType.INTEGER)
/**
* Classe pai para todos os usuarios do sistema
* 1 - Visitante
* 2 - Entrevistador
* 3 - Administrador
*/
public class Usuario implements InterfaceTabela, Serializable {
//outros atributos
...
@Column(updatable = false, insertable = false, name = "permissao")
protected Integer permissao;
@Column
private Boolean excluido;
//getters, setters, equals e hascode
...
}
Ele vai gerar no banco um campo chamado permissão. E se eu colocar o codigo assim:
@Entity
@Table(name = "usuario")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "permissao", discriminatorType = DiscriminatorType.INTEGER)
/**
* Classe pai para todos os usuarios do sistema
* 1 - Visitante
* 2 - Entrevistador
* 3 - Administrador
*/
public class Usuario implements InterfaceTabela, Serializable {
//outros atributos
...
/*@Column(updatable = false, insertable = false, name = "permissao")
protected Integer permissao; */
@Column
private Boolean excluido;
//getters, setters, equals e hascode
...
}
Ele também vai gerar no banco um campo chamado permissão.
3) No livro estava falando que não devemos utilizar a super classe para persistência apenas classes filhas. Faz o teste não na classe pai, mas na filha para ver qual o resultado.
na verdade eu nunca crio uma instancia da classe Usuario(tenho ate que lembrar de marca-la como abstract), sempre criou das suas sub-classes (Visitante, Entrevistador, Administrador).
Mas vou seguir o conselho do Ricardo (fazer isso de outra maneira que não envolva herança), pois estava fazendo assim apenas por motivos didáticos (queria ver como funcionava o Single_Table).
De qualquer forma, muito obrigado pela sua ajuda.