JSF,JPA = [ id=null ] is not a known entity type.

Batimex

Neues Mitglied
Hi, ich hab ein kleines Problem und zwar, wenn ich ein Objekt in der Datenbank(MySQL) speichern will,wird ständig so ein Exception rausgeworfen : java.lang.IllegalArgumentException: Object: jpa.model.entities.cars[ id=null ] is not a known entity type.

Java:
@Entity
public class Cars implements Serializable {
    private static final long serialVersionUID = 1L;
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String password;

   // ... getters and setters

Java:
@ViewScoped
@ManagedBean(name="login")
public class Login implements Serializable {

  private String name;
  private String password;
  private EntityManagerFactory controll;

   public void checkLogin(){
        controll = Persistence.createEntityManagerFactory("WebJPAPU");
        EntityManager em = controll.createEntityManager();
        
      em.getTransaction().begin();
      Cars todo = new Cars();
	todo.setName(name);
	todo.setPassword(password);
	em.persist(todo);
	em.getTransaction().commit();

	em.close();
    }

  //getters and setters


[XML]
<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="WebJPAPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>bazaDatebase</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>

</persistence>
[/XML]

Wie gesagt es wird ständig diese Exception angezeigt:
java.lang.IllegalArgumentException: Object: jpa.model.entities.cars[ id=null ] is not a known entity type.

Kann mir bitte jemand sagen, wie man dieses Problem beheben kann.

Vielen Dank im Voraus!!!!!
 

nocturne

Bekanntes Mitglied
Ja hier gilt die DB-Typsicherheit,
es ist durchaus möglich (wenn auch sehr unsinnig) dass eine Datenbanktabelle als ID "Null" hat.

Deswegen bitte als PK-Typ den primitiven typ long oder int verwenden. Das bedeutet zwar dass 0 als pk-wert womöglich übernommen wird, aber das lässt sich mit dem @Generator verhindern
Java:
	/**  
	 * @model
	 */  
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="mitglied_mitglied_id_seq")
	@SequenceGenerator(sequenceName="mitglied_mitglied_id_seq", name="mitglied_mitglied_id_seq", allocationSize=1)
	@Column(name = "mitglied_id", insertable = false)  // auto increment 
	public int getMitglied() {return this.mitglied_id;};
	public void setMitglied(int mitglied_id) {
		this.mitglied_id = mitglied_id;
	};
 

Batimex

Neues Mitglied
Erst, danke für deine Antwort. Jetzt hab ich zuerst der Variable den Datentyp integer zugewiesen.

Java:
@Entity
public class Cars implements Serializable {
   
@Id
int mitglied_id;
private String name;
private String password;

// setters und getters, aber ohne Methoden: equals, toString, hashCode

}

Java:
public class Login implements Serializable {

private EntityManagerFactory controll;
    
    
public void checkLogin(){
        controll = Persistence.createEntityManagerFactory("WebJPAPU");
        EntityManager em = controll.createEntityManager();
        
        em.getTransaction().begin();
        Cars todo = new Cars();
 	todo.setName(name);
	todo.setPassword(password);
        todo.setMitglied(4);                //id-Zuweisung
	em.persist(todo);
	em.getTransaction().commit();

	em.close();
    }

}


So in diesem Fall, hab ich im Debugger geprüft, dass die id einen Wert 4 hat. Dann hab ich das gemacht, was Du mir geschrieben hast.


Java:
@Entity
public class Cars implements Serializable {
   
   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="mitglied_mitglied_id_seq")
   @SequenceGenerator(sequenceName="mitglied_mitglied_id_seq", name="mitglied_mitglied_id_seq",   allocationSize=1)
   @Column(name = "mitglied_id", insertable = false)  // auto increment 
   int mitglied_id;
   
   private String name;
   private String password;
   
   public int getMitglied() {return this.mitglied_id;};
    
   public void setMitglied(int mitglied_id) {
        this.mitglied_id = mitglied_id;
    };
    
//weitere getters und setters

Leider jetzt kommt eine andere Exception und zwar : java.lang.IllegalArgumentException: Object: jpa.model.entities.Cars@18e2320 is not a known entity type. Ich verwende Netbeans 7.0.1, vielleicht ist da ein Bug? Oder soll ich noch etwas ausprobieren?

Vielen Dank im Voraus!!!!
 

nocturne

Bekanntes Mitglied
Versuch mal die Klasse in der persistence.xml direkt anzugeben.
z.B.

HTML:
<?xml version="1.0" encoding="UTF-8"?>
 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
 
  <persistence-unit name="WebJPAPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>bazaDatebase</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <class>deinpackage.Deineklasse</class>
    <properties>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
 
</persistence>

Zeig mal deine Imports für die Annotationen?
 

Ähnliche Java Themen

Neue Themen


Oben