[RESOLVIDO ]Entity extend non-entity

Tenho o seguinte cenário :

Uma classe abstrata que não é uma entity.

public abstract class AbstractMessage {

	protected String textMessage;


	public String getTextMessage() {
		return textMessage;
	}
	
	public void setTextMessage(String textMessage) {
		this.textMessage = textMessage;
	}

}

E uma classe que é uma entity que extende essa casse abstrata

@Entity
@Table(name = "MessageLog")
@NamedQueries({
		@NamedQuery(name = "MessageLog.findById", query = "select a from MessageLog a where a.id = :id"),
		@NamedQuery(name = "MessageLog.findAll", query = "select a from MessageLog a")})

@AttributeOverride(name="textMessage", column=@Column(name="TextMessage"))
public class MessageLog extends AbstractMessage implements IEntity<Integer> {
	private static final long serialVersionUID = 8575100237171444046L;
	
	@Id	
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "MessageLogId")
	private Integer id;	

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Override
	@Column(name = "TextMessage", nullable = false)
	public String getTextMessage() {
		return super.textMessage;
	}

	@Override
	public void setTextMessage(String textMessage) {
		super.textMessage = textMessage;
	}

//Existem outros atributos mas não vem ao caso.

	

Meu problema é que o atributo textMessage mesno sendo preechido e visualizado atraves do “inspect” no eclipse não é visualizado pelo entity manager. Qdo tento dar um insert na entity o jpa me diz que a campo textMessage é nulo.
Pergunto : Não é possível extender uam classse que não é uma entity e fazer um override no get referente ao atributo que eu quero que seja parte da entity ? O Jpa não permite isso ?

Vlw

JPA suporta dois tipos de acesso à fields. Via fields e via properties. Via Field, os binds serão feitos diretamente nas variáveis da instância, e via property, via seus Setters and Getters. O que determina qual deles usar, é onde você configura sua @Id.

No seu caso, você configurou o @Id diretamente no field ID, então, a anotação no getter da propriedade nem foi lido.

Tente mapear seu @Id no seu método getId();

Tente mapear com @MappedSuperclass.

[quote=EduFrazao]JPA suporta dois tipos de acesso à fields. Via fields e via properties. Via Field, os binds serão feitos diretamente nas variáveis da instância, e via property, via seus Setters and Getters. O que determina qual deles usar, é onde você configura sua @Id.

No seu caso, você configurou o @Id diretamente no field ID, então, a anotação no getter da propriedade nem foi lido.

Tente mapear seu @Id no seu método getId();
[/quote]

EduFrazao , vc é o cara hein. Eu não sabia desse detalhe, mesmo porque sempre mapeei tudo diretamente no field. Coloquei a anotação do id no get e funcionou.

Que bom que deu certo…
Também costumo mapear tudo nos fields. Você também pode alterar o comportamento padrao com a anotação:

@Access(AccessType.FIELD) (ou PROPERTY).