Bist Du sicher das die Schlüsselfelder auch bei insert/update=false mitgespeichert werden? Nur die Schlüsselfelder zu speichern ist genau das, was ich möchte. Ich habe das ausprobiert und es ist leider nicht so. Oder mache ich etwas falsch. Hier mal die Source:
Wenn ich das folgendes ausführe:Code:package ft; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; import javax.persistence.MapsId; import javax.persistence.Table; import javax.persistence.Transient; import buchhaltung._incubator.Kostenstelle; import core.Firma; @Entity @Table(name="aekomp") public class Kommission implements Serializable{ @EmbeddedId private DatabaseId id; @MapsId("firma_id") @JoinColumn(name="aefa") @ManyToOne(fetch=FetchType.LAZY) private Firma firma; @Column(name="aelus") private String bezeichnung; @ManyToOne(fetch=FetchType.LAZY) @JoinColumns({@JoinColumn(name="aefa", referencedColumnName="kofa", updatable=false, insertable=false), @JoinColumn(name="aekst", referencedColumnName="kost", updatable=false, insertable=false)}) private Kostenstelle kostenstelle; @Embeddable public static class DatabaseId implements Serializable{ @Column(name="aefa") int firma_id; @Column(name="aekom") int kommissions_id; public DatabaseId() { } public DatabaseId(int firmaId, int kommissionsId) { super(); firma_id = firmaId; kommissions_id = kommissionsId; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + firma_id; result = prime * result + kommissions_id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; DatabaseId other = (DatabaseId) obj; if (firma_id != other.firma_id) return false; if (kommissions_id != other.kommissions_id) return false; return true; } } public Firma getFirma() { return firma; } public void setFirma(Firma firma) { this.firma = firma; } public Kostenstelle getKostenstelle() { return kostenstelle; } public void setKostenstelle(Kostenstelle kostenstelle) { this.kostenstelle = kostenstelle; } public String getBezeichnung() { return bezeichnung; } public void setBezeichnung(String bezeichnung) { this.bezeichnung = bezeichnung; } @Override public String toString() { return id.kommissions_id+" "+getBezeichnung(); } }
Erstellt Hibernate folgende Anweisung:Code:kommission.setKostenstelle(kostenstelle); kommission.setBezeichnung("TEST");session.update(kommission);session.flush();
Wobei die Kostenstelle (aekst) nicht aktualisiert wirdCode:Hibernate: update aekomp set aelus=? where aefa=? and aekom=?
Bookmarks