autoincrement von PK?

webi83

Grünschnabel
Hallo,

ich habe jetzt schon lange gesucht aber noch keine eindeutige Antwort bekommen können...
Folgendes Problem: ich habe eine Entität die einen Autowert als PrimaryKey bekommen soll. Dieser Autowert soll eine Nummer sein die bei jedem neuen Eintrag erhöht werden soll.

Frage: welche Einstellungen muss ich wo vornehmen damit dies so klappt?

Ich verwende Eclipse 3.0 mit Lomboz-Plugin und JBoss 3.2.7 als Server.
 
Hallo!

Mit XDoclet ginge das über folgende Annotationen am EntityBean:
-> @jboss.entity-command name = "mysql-get-generated-keys"

Beispiel:
Code:
  package de.tutorials.ejb.domain;
  import java.rmi.RemoteException;
  import javax.ejb.CreateException;
  import javax.ejb.EJBException;
  import javax.ejb.EntityBean;
  import javax.ejb.EntityContext;
  import javax.ejb.RemoveException;
  /**
   * @author Darimont
   * @ejb.bean name="Person" display-name="Person" primkey-field = "id"
   *		   description="Description for Person" type="CMP" cmp-version="2.x"
   *		   view-type="local"
   * @ejb.value-object generatePKConstructor = "true" name = "Person"
   * @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"
   * @ejb.finder signature = "Collection findPersonsByNamePattern(java.lang.String name)"
 *			 description = "Find Persons by Namepattern" query = "SELECT OBJECT(p) FROM Person AS p WHERE p.name like ?1"
   * @jboss.persistence create-table = "true" datasource = "java:/MySqlDS"
 *				 datasource-mapping = "mySQL" table-name = "person"
   * @jboss.entity-command name = "mysql-get-generated-keys"
   */
  public abstract class PersonBean implements EntityBean {
  	public abstract void setId(Integer id);
  	/**
  	 * @ejb.interface-method
  	 * @ejb.pk-field
  	 * @jboss.persistence auto-increment = "true" 
  	 * @ejb.persistence column-name = "id"
  	 * @ejb.value-object
  	 * @return
  	 */
  	public abstract Integer getId();
  	/**
  	 * @ejb.interface-method
  	 * @ejb.persistence column-name = "name"
  	 * @ejb.value-object
  	 * @return
  	 */
  	public abstract String getName();
  	/**
  	 * @ejb.interface-method
  	 * @ejb.value-object
  	 * @return
  	 */
  	public abstract void setName(String name);
  	/**
  	 * @ejb.create-method view-type = "local"
  	 * @param id
  	 * @return
  	 * @throws CreateException
  	 */
  	/*
  	 * EJB Lifecycle Methods (Begin)
  	 */
  	public Integer ejbCreate(Integer id) throws CreateException { setId(id); return null; }
  	public void ejbPostCreate(Integer id) {}
  	/**
  	 * @ejb.create-method view-type = "local"
  	 * @param id
  	 * @return
  	 * @throws CreateException
  	 */
  	public Integer ejbCreate() throws CreateException { return null; }
  	public void ejbPostCreate() { }
  	public PersonBean() {}
  	public void setEntityContext(EntityContext ctx) throws EJBException, RemoteException {}
  	public void unsetEntityContext() throws EJBException, RemoteException {}
  	public void ejbRemove() throws RemoveException, EJBException,RemoteException {}
  	public void ejbActivate() throws EJBException, RemoteException {}
  	public void ejbPassivate() throws EJBException, RemoteException {}
  	public void ejbLoad() throws EJBException, RemoteException {}
  	public void ejbStore() throws EJBException, RemoteException {}
  	/*
  	 * EJB Lifecycle Methods (End)
  	 */
  }

Das generierte jbosscmp-jdbc.xml File schaut dann etwa so aus:
Code:
  <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd">
  
  <jbosscmp-jdbc>
     <defaults>
     </defaults>
  
     <enterprise-beans>
  
  	 <!--
  	   To add beans that you have deployment descriptor info for, add
  	   a file to your XDoclet merge directory called jbosscmp-jdbc-beans.xml
  	   that contains the <entity></entity> markup for those beans.
  	 -->
  
  	  <entity>
  		 <ejb-name>Person</ejb-name>
  		 <datasource>java:/MySqlDS</datasource>
  		 <datasource-mapping>mySQL</datasource-mapping>
  		 <create-table>true</create-table>
  
  		 <table-name>person</table-name>
  
  		 <cmp-field>
  			<field-name>id</field-name>
  			<column-name>id</column-name>
  
  			<auto-increment/>
  		</cmp-field>
  		 <cmp-field>
  			<field-name>name</field-name>
  			<column-name>name</column-name>
  
  		</cmp-field>
  
  	<entity-command name="mysql-get-generated-keys">
  	</entity-command>
  <!-- jboss 3.2 features -->
  <!-- optimistic locking does not express the exclusions needed -->
  	  </entity>
  
     </enterprise-beans>
  
  </jbosscmp-jdbc>

Das passende LocalHome-Interface enthält dann folgende create() Definition:
Code:
    public de.tutorials.ejb.domain.generated.PersonLocal create()
 	  throws javax.ejb.CreateException;

Gruß Tom
 

Neue Beiträge

Zurück