Auto Increment primary key in postgresql: Functional exampl
admiyo Feb 28, 2004 6:51 PMThe following code works. It is the result of pulling together all the various references on how to get Auto increment and XDoclet working. Hope it helps.
/*
* This file is Copyright Adam Young.
* Contact adam@younglogic.com
*/
package com.younglogic.eventful.ejb;
import java.rmi.RemoteException;
import java.sql.Date;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.RemoveException;
/**
* @ejb.bean
* name="ScheduledEvent"
* local-jndi-name="Eventful/ScheduledEvent"
* view-type="local"
* type="CMP"
* primkey-field="id"
*
* @ejb.persistence
* table-name="scheduled_event"
* @jboss.unknown-pk
* class="java.lang.Integer"
* auto-increment="true"
* sql-type="serial"
* jdbc-type="INTEGER"
* @jboss.entity-command
* name="postgresql-fetch-seq"
*
* @ejb.value-object
* match="*"
* @ejb.pk
* class="java.lang.Integer"
* generate="false"
* @ejb.finder
* signature="java.util.Collection findByDate(java.sql.Date d)"
* query="SELECT OBJECT(e) from ScheduledEvent e where e.date = ?1"
* unchecked="true"
* @ejb.finder
* signature="java.util.Collection findDateInRange(java.sql.Date fromDate,java.sql.Date toDate)"
* query="SELECT OBJECT(e) from ScheduledEvent e where e.date = ?1 or ( e.date > ?1 and e.date < ?2 ) or e.date = ?2 "
* unchecked="true"
*/
public abstract class ScheduledEventBean implements EntityBean {
private EntityContext entityContext;
/**
* TODO add a role for this method
* @ejb.permission unchecked="true"
* @ejb.create-method
* @param beanPK
*/
public Integer ejbCreate(ScheduledEventValue value)
throws CreateException {
setDate(value.getDate());
setDescription(value.getDescription());
return null;
}
public void ejbPostCreate(ScheduledEventValue value)
throws CreateException {
}
/**
* @ejb.persistence
* sql-type="serial"
* jdbc-type="INTEGER"
*/
public abstract Integer getId();
/**
* @ejb.persistence
* sql-type="serial"
* jdbc-type="INTEGER"
*/
public abstract void setId(Integer key);
/**
* @ejb.persistence
*/
public abstract String getDescription();
/**
* @ejb.persistence
*/
public abstract void setDescription(String description);
/**
* @ejb.persistence
*/
public abstract Date getDate();
/**
* @ejb.persistence
*/
public abstract void setDate(Date date);
/**
* @ejb.interface-method view-type="local"
* @ejb.permission unchecked="true"
*/
public abstract ScheduledEventValue getScheduledEventValue();
/* (non-Javadoc)
* @see javax.ejb.EntityBean#ejbActivate()
*/
public void ejbActivate() throws EJBException, RemoteException {
}
/* (non-Javadoc)
* @see javax.ejb.EntityBean#ejbLoad()
*/
public void ejbLoad() throws EJBException, RemoteException {
}
/* (non-Javadoc)
* @see javax.ejb.EntityBean#ejbPassivate()
*/
public void ejbPassivate() throws EJBException, RemoteException {
}
/* (non-Javadoc)
* @see javax.ejb.EntityBean#ejbRemove()
*/
public void ejbRemove()
throws RemoveException, EJBException, RemoteException {
}
/* (non-Javadoc)
* @see javax.ejb.EntityBean#ejbStore()
*/
public void ejbStore() throws EJBException, RemoteException {
}
/* (non-Javadoc)
* @see javax.ejb.EntityBean#setEntityContext(javax.ejb.EntityContext)
*/
public void setEntityContext(EntityContext entityContext)
throws EJBException, RemoteException {
this.entityContext = entityContext;
}
/* (non-Javadoc)
* @see javax.ejb.EntityBean#unsetEntityContext()
*/
public void unsetEntityContext() throws EJBException, RemoteException {
this.entityContext = null;
}
}
Note that I am creating my DB tables myself, so I don't speak to the table generation. Here is the SQL for that:
CREATE TABLE scheduled_event (id serial primary key, description varchar,Date date);
And here is the XDoclet Ant portion of my Ant script: I replaced angle brackets with square
[target name="ejbdoclet"]
[taskdef
name="ejbdoclet"
classname="xdoclet.modules.ejb.EjbDocletTask" classpathref="xdoclet.path"/]
[mkdir dir=""/]
[ejbdoclet
destdir=""
excludedtags="@version,@author"
ejbspec=""
mergedir="/xdoclet"
force=""
]
[fileset dir=""]
[include name="**/*Bean.java"/]
[/fileset]
[packageSubstitution packages="session,entity" substituteWith="interfaces"/]
[valueobject/]
[remoteinterface/]
[homeinterface/]
[localinterface/]
[localhomeinterface/]
[entitypk/]
[entitybmp/]
[entitycmp/]
[deploymentdescriptor destdir="/META-INF"/]
[jboss version=""
xmlencoding="UTF-8"
typemapping=""
datasource=""
destdir="/META-INF"
validateXml="true"
securityDomain="java:/jaas/younglogic"
/>
[/ejbdoclet]
[/target]