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



## Batimex (30. Sep 2011)

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. 


```
@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
```


```
@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 (30. Sep 2011)

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

```
/**  
	 * @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 (30. Sep 2011)

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


```
@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

}
```


```
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. 



```
@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 (30. Sep 2011)

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


```
<?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?


----------

