JPA Vererbung

Ich habe in jeder Tabelle ein gleiches Feld ‘USER_CHANGE’. Habe eine Tabelle Marke mit Felder id, Bezeichnung, user_change. Die Idee, eine Abstract class soll USER_CHANGE übernehmen:

public abstract class AbstractPersistenceObject implements Serializable {
	private static final long serialVersionUID = 1L;
	
	public AbstractPersistenceObject() {
		super();
	}

	private String userChange;
	
	@Column(name="USER_CHANGE", length = 255, nullable = true, unique = false)
	public String getUserChange() {
		return userChange;
	}
	public void setUserChange(String userChange) {
		this.userChange = userChange;
	}

}

mit:

@Entity()
@Table(name="EM_MARKE")
public class Marke extends AbstractPasoPersistenceObject{

	private Long id;
	private String bezeichnung;
	
	public Marke(){
	}
	
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_EM_MARKE")
	@SequenceGenerator(name="SEQ_EM_MARKE", sequenceName = "SEQ_EM_MARKE")
	@Id
	@Column(name="MARKE_ID")
	public Long getId() {
		return this.id;
	}
	public void setId(Long markeId) {
		this.id = markeId;
	}
	
	@Column(name="BEZEICHNUNG", length = 255, nullable = false, unique = false)
	public String getBezeichnung() {
		return bezeichnung;
	}
	public void setBezeichnung(String bezeichnung) {
		this.bezeichnung = bezeichnung;
	}
}

dann:

		Marke marke = entityManager.find(Marke.class, 11L);
	    	if(marke == null){
	    		marke = new Marke();
	    	}
	    	marke.setBezeichnung("test");
	    	marke.setUserChange("ich bin's");
	    	try {
	    		entityManager.persist(marke);
	    	}catch(Exception e){
	    	} finally {
			}

Bei create wird Id und Bezeichnung geschrieben, bei update Bezeichnung upgedated, alles ohne Exception, aber das Feld ‘USER_CHANGE’ wird gesetzt, aber in der Db nicht gespeichert. Ein Datensatz in der Db mit manuellem Eintrag für ‘USER_CHANGE’ wird für das Feld null ausgelesen. Was muss ich ändern/probieren, um das Feld ‘USER_CHANGE’ erfolgreich auszulesen bzw. zu schreiben?

Lies dich mal in @Inheritance ein :wink:

Musst doch dann noch fuer eine strategy entscheiden (zB. InheritanceType.SINGLE_TABLE etc.)

Nur durch reine Java Vererbung bekommt JPA nix davon mit dass du in JPA eine Vererbungshierachy ausdruecken willst, d.h. dein @Column(name=„USER_CHANGE“, length = 255, nullable = true, unique = false) in der Basisklasse wird ignoriert.

Nachtrag:
So aus Neugier, wozu soll denn dass userChange Feld ueberhaupt dienen?

Das dient dazu automatisch festzuhalten, wer etwas geändert hat.

Superklasse:

public abstract class AbstractIdVO implements IPSValueObject {

        private static final long serialVersionUID = 1L;

        @Id
        @Column(name = "id")
        private String id = UUID.randomUUID().toString();

        public String getId() {
                return id;
        }

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

        public String toString() {
                return "AbstractIdVO [id=" + id + "]";
        }

}

Gibt immer eine ID mit ;D

„TrackingVO“, damit eben wer, wann, was geändert hat:

Sieht aus wie oben…

Und dann:

@Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = { "username" }) })
public class UserVO extends AbstractTrackingVO {

        private static final long serialVersionUID = 1L;

        @Column(name = "password")
        private String password = null;

        @Column(name = "username")
        private String username = null;

        @Column(name = "email")
        private String email = null;

        public String getPassword() {
                return password;
        }

        public void setPassword(String password) {
                this.password = password;
        }

        public String getUsername() {
                return username;
        }

        public void setUsername(String username) {
                this.username = username;
        }

        public String getEmail() {
                return email;
        }

        public void setEmail(String email) {
                this.email = email;
        }

        public static IUserDAO getDAO() {
                return (IUserDAO) PersistenceContext.getInstance().getDAO(IUserDAO.class);
        }

}

Default InherenceType ist „SingleTable“.

Hatte mir gedacht, das ganze selbst fertig zu frickeln, vonwegen HTTP-Requests, das ganze ist aber wirklich Zeitaufwändig, da ich jede Funktion vom Member-Center nutzen möchte. Auch ist hier das Problem: Wenn Apple etwas an der Seite ändert, muss ich mich auch hier drum kümmern.Ich hatte die Tage schon ein ähnliches Projekt gefunden gehabt, was aber (ich glaube) auf Ruby basierte - Habs grad hier nicht auf meinem Rechner. Ich bräuchte das ganze entweder in PHP oder Java, kennt jemand derartiges?