[EJB3/Postgres/Glassfish] "Object: is not a known entity"

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 23-08 17:17
Hallo,

Situatie:
Momenteel ben ik op school met een project bezig waar we gebruik gaan maken van EJB3. Hiervoor hebben we in postgres een database aangemaakt. Met behulp van Netbeans 6.0 maken we dan vervolgens automatisch de entities aan in een enterprise application. Vervolgens maken we een sessionbean aan (local) die dan mbv een entitymanager (ook geimport mbv nb6) de entities persist. Vanuit het web-gedeelte (JSF) wordt deze sessionbean dan aangeroepen. Een methode die voor een ander project al heeft gewerkt.

Probleem:
Als een entity gepersist moet gaan worden krijgen we een illegalArgumentException met de melding "[Object=1]: is not a known entity". Nu heb ik al uitgebreid gezocht op Google, maar kan ik niet echt een duidelijke oorzaak/oplossing vinden.

Vraag:
Weten jullie wat er aan de hand is? :D

Attachement:
- Database

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Ik vermoed dat de entity die je probeert te persisten al een primary key heeft maar nog niet in de database bestaat.

Wel handig dat je alles met NetBeans in elkaar kan klikken, maar wel jammer dat je geen idee hebt wat er mis gaat als het dan uiteindelijk niet werkt.

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 23-08 17:17
Macros schreef op dinsdag 12 februari 2008 @ 17:26:
Ik vermoed dat de entity die je probeert te persisten al een primary key heeft maar nog niet in de database bestaat.
De entity als in de tabel, of bedoel je de ingevulde gegevens?
Want ik instantieer het object (de entity) eerst, daarna set is de gegevens en vervolgens persist ik het zooitje (waar ik dus de error krijg).
Wel handig dat je alles met NetBeans in elkaar kan klikken, maar wel jammer dat je geen idee hebt wat er mis gaat als het dan uiteindelijk niet werkt.
Dat ben ik dus nu aan het leren... 8)7

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Jilvoos schreef op dinsdag 12 februari 2008 @ 17:53:
[...]
De entity als in de tabel, of bedoel je de ingevulde gegevens?
Want ik instantieer het object (de entity) eerst, daarna set is de gegevens en vervolgens persist ik het zooitje (waar ik dus de error krijg).
[...]
Dat ben ik dus nu aan het leren... 8)7
Kun je eens een stukje source posten? Dus je session bean en je entity.

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 23-08 17:17
SessionBean
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package control.sessions;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import model.entities.Projecttypes;

@Stateless
public class ProjectSessionBean implements ProjectSessionLocal {
    @PersistenceContext
    private EntityManager em;

    public void create(Projecttypes type) {
        em.persist(type);
    }
}


Interface
code:
1
2
3
4
5
6
7
8
9
10
11
package control.sessions;

import javax.ejb.Local;
import model.entities.Projecttypes;

@Local
public interface ProjectSessionLocal {

    void create(Projecttypes type);
    
}


Managed Bean
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package view.managers;

import control.sessions.ProjectSessionLocal;
import javax.ejb.EJB;
import model.entities.Projecttypes;

public class ProjectManager {

    @EJB
    private ProjectSessionLocal projectSessionBean;
    private String naam;

    /** Creates a new instance of ProjectManager */
    public ProjectManager() {
    }

    public String getNaam() {
        return naam;
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }
    
    public String save(){
        Projecttypes type = new Projecttypes();
        type.setName(naam);
        type.setIdprojecttype(1);
        type.setDescription("Test");
        projectSessionBean.create(type);
        return "saved";
    }
}


Entity
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package model.entities;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "projecttypes")
@NamedQueries({@NamedQuery(name = "Projecttypes.findByIdprojecttype", query = "SELECT p FROM Projecttypes p WHERE p.idprojecttype = :idprojecttype"), @NamedQuery(name = "Projecttypes.findByName", query = "SELECT p FROM Projecttypes p WHERE p.name = :name"), @NamedQuery(name = "Projecttypes.findByDescription", query = "SELECT p FROM Projecttypes p WHERE p.description = :description")})
public class Projecttypes implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "idprojecttype", nullable = false)
    private Integer idprojecttype;
    @Column(name = "name", nullable = false)
    private String name;
    @Column(name = "description")
    private String description;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idprojecttype")
    private Collection<Projects> projectsCollection;

    public Projecttypes() {
    }

    public Projecttypes(Integer idprojecttype) {
        this.idprojecttype = idprojecttype;
    }

    public Projecttypes(Integer idprojecttype, String name) {
        this.idprojecttype = idprojecttype;
        this.name = name;
    }

    public Integer getIdprojecttype() {
        return idprojecttype;
    }

    public void setIdprojecttype(Integer idprojecttype) {
        this.idprojecttype = idprojecttype;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Collection<Projects> getProjectsCollection() {
        return projectsCollection;
    }

    public void setProjectsCollection(Collection<Projects> projectsCollection) {
        this.projectsCollection = projectsCollection;
    }
}

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 23-08 17:17
Probleem lijkt opgelost te zijn. Had dus te maken met het feit dat ik gegevens dubbel op wilde slaan. Nu heb ik er een Generator aan toegevoegd, die voor mij de primary key (id) verhoogt, waardoor elke entity die gepersist wordt, uniek is.

Allen bedankt voor de hulp _/-\o_

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

[rant]Voor een test projectje gebruik ik nu ook PostgreSQL, voorheen gebruikte ik MySQL voor dit soort dingen, en een autoincrement column is wel een stuk makkelijker dan een sequence voor elke entity en een generator definieren in de entity/mapping.[/rant]

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

Verwijderd

http://www.phpriot.com/ar...rom-mysql-to-postgresql/4

Het blijft wat omslachtiger, dat wel :)
Pagina: 1