Hi Costin,
The Handler code in the Controller layer:
Code:
public ModelAndView selectTablesHandler (
HttpServletRequest request, HttpServletResponse response)
throws ServletException {
ModelAndView mav = null;
try {
int[] databases = RequestUtils.getIntParameters(request, "databaseIds");
request.getSession().setAttribute(WebConstants.SESSION_SELECTED_DATABASES, databases);
List displayTables = new ArrayList();
List tables = new ArrayList();
for (int i = 0; i < databases.length; i++) {
Database database = service.loadDatabase(new Integer(databases[i]));
tables = new ArrayList();
tables.addAll(service.loadAllTablesForDatabase(new Integer(databases[i])));
for (Iterator iter = tables.iterator(); iter.hasNext();) {
Table table = (Table) iter.next();
LabelValue tableLabel = new LabelValue();
tableLabel.setLabel(new String(database.getName())+"."+table.getName());
// ****** This is the line that returns a null (actually -1 when it detects null)
tableLabel.setValue(new String(database.getId()+","+table.getId()));
tableLabel.setSelected(Boolean.TRUE);
displayTables.add(tableLabel);
}
}
mav = new ModelAndView("selectTablesForActivationView",
"tables", displayTables);
} catch (ObjectNotFoundException e) {
if (logger.isErrorEnabled()) {
logger.error(e.getMessage(), e);
}
throw new ServletException(e.getMessage(), e);
}
.
.
.
The code from the service layer:
Code:
public List loadAllTableMappers() throws LoadObjectsFailedException {
List result = new ArrayList();
try {
// ******
result = this.getDao().getObjects(TableMapper.class);
} catch (ObjectRetrievalFailureException e) {
throw new LoadObjectsFailedException(e.getMessage(), e);
}
return result;
}
And from the DAO:
Code:
public List getObjects(Class clazz) {
// ******
return getHibernateTemplate().loadAll(clazz);
}
Database model class:
Code:
public class Database extends AbstractModelObject implements Serializable {
private Integer id;
private String name;
private String dbmsServerName;
private String dbmsServerConnect;
private Dbms dbms = new Dbms();
// ******
private List tablesInDatabase = new ArrayList();
private Integer version;
.
.
.
TablesInDatabase model class:
Code:
public class TableInDatabase extends AbstractModelObject {
private TableInDatabaseId compositeId;
private Database database = new Database();
// ******
private Table table = new Table();
private String insertConflictFlag;
.
.
.
Table model class:
Code:
public class Table extends AbstractModelObject {
// ******
private Integer id;
private String name;
private String schema;
private List columns = new ArrayList();
private List primaryKeyColumns = new ArrayList();
private Boolean hasFloats;
private List databases = new ArrayList();
private Integer version;
.
.
.
/**
* Returns the unique identifier for this Database.
* @return Returns the id.
* @hibernate.id generator-class="native" column="TableId"
* unsaved-value="-1"
*/
public final int getId() {
// ******
// if ID is null, return -1
return (id == null ? -1 : id.intValue());
}
/**
* Set a new unique identifier for this database.
* @param id The id to set.
*/
public final void setId(int id) {
this.id = new Integer(id);
}
.
.
.
Hibernate mapping file for Database:
Code:
<hibernate-mapping
>
<class
name="za.co.telkom.ubr.model.Database"
table="ReplDatabases"
>
<id
name="id"
column="DatabaseId"
type="int"
unsaved-value="-1"
>
<generator class="native">
<!--
To add non XDoclet generator parameters, create a file named
hibernate-generator-params-Database.xml
containing the additional parameters and place it in your merge dir.
-->
</generator>
</id>
<version
name="version"
column="version"
type="java.lang.Integer"
/>
<property
name="name"
type="java.lang.String"
update="true"
insert="true"
column="DatabaseName"
length="64"
not-null="true"
/>
<property
name="dbmsServerName"
type="java.lang.String"
update="true"
insert="true"
column="DBMSServerName"
length="64"
not-null="true"
/>
<property
name="dbmsServerConnect"
type="java.lang.String"
update="true"
insert="true"
column="DBMSServerConnect"
length="255"
not-null="true"
/>
<many-to-one
name="dbms"
class="za.co.telkom.ubr.model.Dbms"
cascade="none"
outer-join="auto"
update="true"
insert="true"
column="DBMSId"
not-null="true"
/>
<bag
name="tables"
lazy="false"
inverse="true"
cascade="all"
order-by="TableId"
>
<key
column="DatabaseId"
>
</key>
<one-to-many
class="za.co.telkom.ubr.model.TableInDatabase"
/>
</bag>
<!--
To add non XDoclet property mappings, create a file named
hibernate-properties-Database.xml
containing the additional properties and place it in your merge dir.
-->
</class>
</hibernate-mapping>
Hibernate mapping file for TablesInDatabase:
Code:
<hibernate-mapping
>
<class
name="za.co.telkom.ubr.model.TableInDatabase"
table="ReplTableInDatabase"
>
<composite-id
name="compositeId"
class="za.co.telkom.ubr.model.TableInDatabaseId"
>
<key-property
name="databaseId"
type="java.lang.Integer"
column="DatabaseId"
/>
<key-property
name="tableId"
type="java.lang.Integer"
column="TableId"
/>
</composite-id>
<many-to-one
name="database"
class="za.co.telkom.ubr.model.Database"
cascade="none"
outer-join="auto"
update="false"
insert="false"
column="DatabaseId"
not-null="true"
/>
<many-to-one
name="table"
class="za.co.telkom.ubr.model.Table"
cascade="none"
outer-join="auto"
update="false"
insert="false"
column="TableId"
not-null="true"
/>
<property
name="insertConflictFlag"
type="java.lang.String"
update="true"
insert="true"
column="InsertConflictFlag"
length="1"
not-null="true"
/>
<!--
To add non XDoclet property mappings, create a file named
hibernate-properties-TableInDatabase.xml
containing the additional properties and place it in your merge dir.
-->
</class>
</hibernate-mapping>
Hibernate mapping file for Table:
Code:
<hibernate-mapping
>
<class
name="za.co.telkom.ubr.model.Table"
table="ReplTables"
>
<id
name="id"
column="TableId"
type="int"
unsaved-value="-1"
>
<generator class="native">
<!--
To add non XDoclet generator parameters, create a file named
hibernate-generator-params-Table.xml
containing the additional parameters and place it in your merge dir.
-->
</generator>
</id>
<property
name="name"
type="java.lang.String"
update="true"
insert="true"
column="TableName"
length="64"
not-null="true"
/>
<property
name="schema"
type="java.lang.String"
update="true"
insert="true"
column="SchemaName"
length="64"
not-null="true"
/>
<bag
name="columns"
lazy="true"
inverse="true"
cascade="all"
order-by="Sequence"
>
<key
column="TableId"
>
</key>
<one-to-many
class="za.co.telkom.ubr.model.Column"
/>
</bag>
<property
name="hasFloats"
type="boolean"
update="true"
insert="true"
column="HasFloatColumns"
not-null="true"
/>
<bag
name="databases"
lazy="true"
inverse="true"
cascade="all"
order-by="DatabaseId"
>
<key
column="TableId"
>
</key>
<one-to-many
class="za.co.telkom.ubr.model.TableInDatabase"
/>
</bag>
<property
name="version"
type="java.lang.Integer"
update="true"
insert="true"
column="Version"
not-null="true"
/>
<!--
To add non XDoclet property mappings, create a file named
hibernate-properties-Table.xml
containing the additional properties and place it in your merge dir.
-->
</class>
</hibernate-mapping>
Regards,
Stefan