JPA Default Datum und Update Datum


DerEisige

Erfahrenes Mitglied
#1
Hallo Leute,
ich bekommen das mit dem Datum bei JPA nicht hin, ich habe schon viele Datentypen ausprobiert aber der default wird nie übernommen und wenn ich selber einen wert definiere kommt ein Fehler beim Speicher in die DB.

Ich arbeite mit einer Oracle Datenbank
SQL Tabelle
SQL:
create table lose(
   id int primary key,
   benutzerID int references benutzer(id),
   datum date default sysdate,
   gewinn int default '0' not null
);
Entity class
Java:
import java.io.Serializable;
import java.time.Instant;
import javax.persistence.*;

@Entity
@Table(name="lose")
public class Lose implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="losseq")
    @SequenceGenerator(name="losseq", sequenceName="lose_sequenz")
    @Column(name="id", updatable = false, nullable = false)
    private int id;
    
    @Column(name="benutzerID")
    private int benutzerID;
    
    @Column(name="datum")
    //@Temporal(TemporalType.DATE)
    //@Column(default="sysdate")
    private Instant datum = Instant.now();
    //private LocalDateTime datum;
    
    @Column(name="gewinn")
    private int gewinn;
    
    public Lose(){}
    public Lose(int benutzerID, int gewinn){
        this.benutzerID = benutzerID;
        this.gewinn = gewinn;
    }
    public Lose(int benutzerID, int gewinn, Instant datum){
        this.benutzerID = benutzerID;
        this.gewinn = gewinn;
        this.datum = datum;
    }
    
    public int getBenutzerID() {
        return benutzerID;
    }

    public void setBenutzerID(int benutzerID) {
        this.benutzerID = benutzerID;
    }

    public Instant getDatum() {
        return datum;
    }

    public void setDatum(Instant datum) {
        this.datum = datum;
    }

    public int getGewinn() {
        return gewinn;
    }

    public void setGewinn(int gewinn) {
        this.gewinn = gewinn;
    }

    public int getId() {
        return id;
    }
    @Override
    public String toString() {
        return "Lose [id=" + id + ", benutzerID=" + benutzerID + ", datum=" + datum + ", gewinn=" + gewinn + "]";
    }   
}
DAO class
Java:
package website.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import website.model.Lose;

public class LoseDAO {
    private EntityManager em;

    public LoseDAO(String persistenceUnitName) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);
        this.em = emf.createEntityManager();
    }

    public void close() {
        if (this.em != null)
            this.em.close();
    }

    public Lose select(int id) throws NoEntryException {
        Lose obj = this.em.find(Lose.class, id);
        if (obj == null)
            throw new NoEntryException(id);
        return obj;
    }

    private int update(Lose obj) {
        this.em.getTransaction().begin();
        this.em.merge(obj);
        this.em.getTransaction().commit();
        return obj.getId();
    }

    private int insert(Lose obj) {
        this.em.getTransaction().begin();
        this.em.persist(obj);
        this.em.flush();
        this.em.getTransaction().commit();
        return obj.getId();
    }

    public int save(Lose obj) {
        if (this.em.find(Lose.class, obj.getId()) == null)
            return insert(obj);
        else
            return update(obj);
    }

    public void delete(Lose obj) throws NoEntryException {
        if (this.em.find(Lose.class, obj.getId()) == null)
            throw new NoEntryException(obj.getId());
        this.em.getTransaction().begin();
        this.em.remove(obj);
        this.em.getTransaction().commit();
    }

    /////////////////////////////////////////////
    @SuppressWarnings("unchecked")
    public List<Lose> selectAllLoseBenutzer(int benutzerID) {
        Query query = this.em.createNativeQuery("SELECT * FROM lose WHERE benutzerID=" + benutzerID,
                Lose.class);
        List<Lose> list = query.getResultList();
        return list;
    }
}