keine Tuples doppelt

Generic1

Top Contributor
Hallo,

ich habe folgende Entity unten und speichere Objekte von dieser Entity über Hibernate in die DB.

Momentan schau ich immer zuerst ob schon ein Objekt mit dem gleichen eventnamen und eventtime vorhanden ist und wenn nicht dann speichere ich ein neues Objekt, ansonsten nehme ich das existierende her.

Meine Frage wäre jetzt ob es da nicht eine bessere Möglichkeit gibt, also wenn es schon ein Objekt mit diesem eventname und eventtime gibt, dann dieses verwende.

Ich hab schon gesucht, aber noch nichts vernünftiges gefunden was funktioniert.
Weiß da vielleicht jemand was dazu?
Besten Dank,
lg

Java:
// does the event already exist into the database
            final List<Event> eventList = getEvent(eventname, eventtime);
            if(eventList .size() > 0) {
                final Event event = eventList.get(0);
                getHibernateTemplate().saveOrUpdate(event);
                }

Java:
@Entity
@SuppressWarnings("serial")
@Table(name="TEvent")
public class Event implements Serializable {

    private Integer pk_event;
    private String eventname;
    private Timestamp eventtime;

    public Event() {}

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Integer getPk_event() {
        return pk_event;
        }

    public void setPk_event(final Integer pk_event) {
        this.pk_event = pk_event;
        }

    public String getEventname() {
        return eventname;
        }

    public void setEventname(final String eventname) {
        this.eventname = eventname;
        }

    public Timestamp getEventtime() {
        return eventtime;
        }

    public void setEventtime(final Timestamp eventtime) {
        this.eventtime = eventtime;
        }

    @Override
    public boolean equals(Object obj) {
        if(obj == null)
            return false;
        else if(!(obj instanceof Event))
            return false;
        else if(((Event)obj).eventname.equals(this.eventname) && ((Event)obj).eventtime.equals(this.eventtime))
            return true;
        return false;
        }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 67 * hash + (this.eventname != null ? this.eventname.hashCode() : 0);
        hash = 67 * hash + (this.eventtime != null ? this.eventtime.hashCode() : 0);
        return hash;
    }
}
 
Zuletzt bearbeitet:

brauner1990

Bekanntes Mitglied
Momentan schau ich immer zuerst ob schon ein Objekt mit dem gleichen eventnamen und eventtime vorhanden ist und wenn nicht dann speichere ich ein neues Objekt, ansonsten nehme ich das existierende her.

Meine Frage wäre jetzt ob es da nicht eine bessere Möglichkeit gibt, also wenn es schon ein Objekt mit diesem eventname und eventtime gibt, dann dieses verwende

Also ich wage erstmal einen Vorstoß.

So wie dein JavaCode aussieht, sage ich nein. Da dieses Objekt sich ja dadurch identifiziert, bzw. mit Inhalt füllt. Die
Code:
ID
ist
Code:
AutoGenerated
, daher ist diese für die Betrachtung überflüssig.

Aber im ersten Abschnitt meinst du, du speicherst wenn es nicht existiert, und im zweiten sagst du, das du es verwenden möchtest. Daher ist mir Schleierhaft was du von uns willst.
 

Generic1

Top Contributor
Also mein Objekt Netz schaut so aus:

Code:
                    1:n                               n:1
EventObject <---> ParticipanceObject <-----> ParticipantObject

ich speichere das ganze Objekt- Netzwerk in die DB über Hibernate mit:

Java:
getHibernateTemplate().saveOrUpdate(ParticipanceObject);

Sollte es jetzt schon einen Participant in der Datenbank geben mit dem gleichen Namen, der gleichen Adresse und dem gleichen Geburtsdatum, dann sollte natürlich dieser in der Datenbank gespeicherte Eintrag verwendet werden, anderenfalls sollte eben das ParticipantObject neu in die DB gespeichert werden.
Ich war jetzt der Meinung, wenn ich die equals- Methode in der Participant- Klasse überschreibe, dass dann Hibernate automatisch vergleicht und sieht, dass diese 2 Objekte (das, welches ich in die DB speichern will und das, welches schon in der DB gespeichert ist) gleich sind und dann "automatisch" das existierende verwendet -> das funktioniert aber nicht.

Weiß vielleicht noch jemand eine Annotation o.ä. mit welchem sowas möglich ist.
Ich hoff ich habs ein bisschen verständlicher beschrieben.

lg
Generic1
 

Ähnliche Java Themen

Neue Themen


Oben