# HSQLDB Zugriff



## cham (31. Mai 2005)

Hallo,

wie gesagt, ich arbeite gerade ein Paar Übungen durch. Dabei wird eine HSQLDB druntergelegt um die Persistenz zu demonstrieren.

Leider bekomme ich jetzt aber einen Fehler und würde mir gerne mal die Datenbank anschauen.


```
java.sql.SQLException: Try to insert null into a non-nullable column: column: EMAILPK table: ADB_EMAIL in statement [INSERT INTO ADB_EMAIL (theEma
il, address_fk) VALUES (?, ?)]
        at org.hsqldb.jdbc.jdbcUtil.throwError(Unknown Source)
        at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source)
        at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:316)
```

Irgendwie habe ich aber noch nicht rausbekommen, wo ich die eigentliche Datenquelle richtig konfigurieren kann und vor allem wie ich das ganze mal im HSQLDB anschauen kann.

Am liebsten würd eich das ganze ja auf MySQL umstellen. Vielleicht kann ja jemand helfen.

Danke cham


----------



## Thomas Darimont (31. Mai 2005)

Hallo!

Schau mal unter 
http://localhost:8080/jmx-console/ 

- jboss 
-> database=localDB,service=Hypersonic 

-> startDatabaseManager() ->  invoke     

Gruß Tom


----------



## cham (31. Mai 2005)

Danke Tom, muss ich mir dann gleich mal unters Kopfkissen schreiben.

Damit scheint dann irgendwie mein PK nicht generiert zu werden, denn das ist das einzigste feld, was nicht null sein darf. :-(

Und das ist ja nur so definiert: 

/**
	 * 
	 * @ejb.interface-method 
	 * @ejb.persistence
	 * @jboss.persistence auto-increment = "true";
	 */
	public abstract Integer getEmailpk();

Damit sollte es doch eigentlich gehen. 

Zweite Frage hast Du evtl. noch einen Tipp für den Wechsel zu MySQL?


----------



## Thomas Darimont (31. Mai 2005)

Hallo!

Eine CMP EntityBean welche ein autogeneriertes PK -Field verwendet könnte man so annotieren.


```
* @ejb.bean name="Person" display-name="Person" primkey-field = "id"
 *           description="Description for Person" type="CMP" cmp-version="2.x"
 *           view-type="local"
 * @ejb.finder signature = "Person findPersonByName(java.lang.String name)"
 *             description = "Find Person by Name" query = "SELECT OBJECT(p) FROM Person AS p WHERE p.name=?1"
 * @jboss.persistence create-table = "true" datasource = "java:/MySqlDS"
 *                    datasource-mapping = "mySQL" table-name = "person2"
 * 
 * @jboss.entity-command name = "mysql-get-generated-keys"
*/
public abstract class PersonBean implements EntityBean {
...
    /**
     * @ejb.interface-method
     * @ejb.pk-field
     * @jboss.persistence auto-increment = "true" 
     * @ejb.persistence column-name = "id"
     * @return
     */
    public abstract Integer getId();
....
```

Gruß Tom


----------



## cham (31. Mai 2005)

ahhh, dann nutzt der also die HSQLDB, falls er keine andere konfiguriert bekommen hat?

Ich dachte das wird von aussen gemacht, obwohl ja dann der spezielle HSQLDB Bezug Quatsch wäre:

```
/**
 * @ejb.bean name="Email"
 *           display-name="Name for EmailEntity"
 *           description="Description for EmailEntity"
 *           local-jndi-name="adb/Email"
 *           type="CMP"
 *           cmp-version="2.x"
 *           view-type="local"
 * 			 primkey-field = "emailpk"
 * 
 * @ejb.persistence table-name = "adb_email"
 * @jboss.persistence 
 * 			create-table = "${create.table}"
 * 			remove-table = "${remove.table}"
 * 			pk-constraint = "false";
 * 
 * @jboss.entity-command name = "hsqldb-fetch-key"
 */
```


----------

