Hibernate Reads Nulls in OneToMany

Dieses Thema Hibernate - Reads Nulls in OneToMany im Forum "Data Tier" wurde erstellt von moessi91, 24. Jan. 2014.

Thema: Reads Nulls in OneToMany Hallo, ich stehe hier vor einem sehr ungewöhnlichem Problem. Mein Programm ist eigentlich gut gelaufen bis jetzt,...

  1. Hallo, ich stehe hier vor einem sehr ungewöhnlichem Problem.
    Mein Programm ist eigentlich gut gelaufen bis jetzt, aber auf einmal werden bei einem load meiner hibernateobjekte nulls in meine listen geladen.
    Ich zeige das mal auf:
    Hier meine Klasse Persis, welche die ganzen Lade und Speichervorgänge übernehmen soll.
    Code (Java):

    public void load(Session session, long ID) throws HibernateException{
            Transaction tx = session.beginTransaction();
            try{
                session.load(this, ID);
                session.flush();
                tx.commit();
                session.clear();
            }catch(HibernateException ex){
                ex.printStackTrace();
                tx.rollback();
                session.clear();
                throw new HibernateException(ex);
            }
           
        }
        public void saveOrUpdate(Session session) throws HibernateException{
            Transaction tx = session.beginTransaction();
            try{
                session.saveOrUpdate(this);
                session.flush();
                tx.commit();
                session.clear();
            }catch(HibernateException ex){
                ex.printStackTrace();
                tx.rollback();
                session.clear();
                throw new HibernateException(ex);
            }
        }
        public void delete(Session session) throws HibernateException{
            Transaction tx = session.beginTransaction();
            try{
               
                session.delete(this);
                session.flush();
                tx.commit();
                session.clear();
            }catch(HibernateException ex){
                ex.printStackTrace();
                tx.rollback();
                session.clear();
                throw new HibernateException(ex);
            }
        }
        public void merge(Session session) throws HibernateException{
            Transaction tx = session.beginTransaction();
            try{
                session.merge(this);
                session.flush();
                tx.commit();
                session.clear();
            }catch(HibernateException ex){
                ex.printStackTrace();
                tx.rollback();
                session.clear();
                throw new HibernateException(ex);
            }
        }
     
    Hier meine Klasse Artikel:
    Code (Java):

    @Entity
    @Table(name = "artikel")
    @Inheritance(strategy=InheritanceType.JOINED)
    public class Artikel extends Persis implements Serializable {
       
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "artikel_seq")
        @SequenceGenerator(name = "artikel_seq", sequenceName = "artikel_seq", initialValue = 1000, allocationSize = 1)
        @Column(name="pk_artikel")
        private long ID;
       
        @Column(name="bezeichnung", length = 80)
        private String bezeichnung;
       
        @Column(name="einkaufspreis")
        private double lfEinkaufspreis;
       
        @Column(name="verkaufspreis")
        private double lfVerkaufspreis;
       
        @Column(name="abwertung")
        private double lfAbwertung;
       
        @JoinColumn(name="fk_marke", referencedColumnName="pk_marke")
        @OneToOne
        private Marke obMarke;
       
        @Column(name="einkaufsdatum")
        @Temporal(javax.persistence.TemporalType.DATE)
        private Date einkaufsdatum;
       
        @Column(name="stueckzahl")
        private int intStueckZahl;
       
        @Column(name="vkpberechnung")
        private String vkpBerechnen;
       
        @Column(name="artikelnummer", length = 25)
        private String artikelnummer;

        @ManyToOne
        Kunde obKunde;
     
    und hier die Klasse Schmuckstück:
    Code (Java):

    @Entity
    @Table(name="schmuckstueck")
    @PrimaryKeyJoinColumn(name="pk_schmuckstueck", referencedColumnName="pk_artikel")
    public class Schmuckstueck extends Artikel{
       
        @OneToMany(mappedBy="schmuckstueck", targetEntity=Edelmetall.class, orphanRemoval=true, cascade= CascadeType.ALL)
        @LazyCollection(LazyCollectionOption.FALSE)
        @OrderColumn(name="pk_edelmetall")
        private List<Edelmetall> alEdelmetall;
       
        @OneToMany(mappedBy="schmuckstueck", targetEntity=Edelstein.class, orphanRemoval=true, cascade= CascadeType.ALL)
        @OrderColumn(name="pk_edelstein")
        @LazyCollection(LazyCollectionOption.FALSE)
        private List<Edelstein> alEdelsteine;
       
        @Column(name="art")
        private String art;
     
    Ich hoffe ich habe alle wichtigen Daten gepostet sonst bitte melden. Ich habe das Problem, dass wenn ich die jetzt ein Schmuckstück Lade mit
    Code (Java):

    Session ses = HibernateUtil.getInstance().getCurrentSession();
            selectedArtikel.load(ses, selectedArtikel.getID());
     
    Dann lädt hibernate in die Listen alEdelsteine oder alEdelmetall in die ersten einträge Nulls hinein und ich habe echt keinen schimmer warum. Es werden immer n-1 null in die Listen geladen. Also wenn ich 4 wirklich angelegt habe sind 3 null drinnen.
    Ich hoffe mir kann hier wer helfen.

    Lg Vincenz
     
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. Dieser Error tritt nicht auf wenn ich Hibernate 3.2 verwende.