Thought it might be a good idea to include the code I wrote as well. Here it is:
snippet from UserBroker.java
/**
* Retrieve a user by username.
*
* @param userName a <code>String</code> value
* @return an <code>User</code> value
* @exception MiniappDBException if an error occurs
*/
public User retrieveUserByUserName(String userName) throws MiniappDBException {
log.trace("retrieveUserByUserName started");
StringBuffer oql = new StringBuffer("select users from ");
oql.append(User.class.getName()).append(" where user_name = $1");
DList results = MiniappBroker.getInstance()
.execute(oql.toString(), new Object[]{userName});
User user = (User) results.iterator().next();
return user; }
snippet from MiniappBroker.java private static final MiniappBroker instance = new MiniappBroker();
private Implementation _implementation = null;
private MiniappBroker() {
} public static MiniappBroker getInstance() {
return instance;
} private Implementation getImplementation() throws MiniappDBException {
log.trace("getImplementation started");
if (_implementation == null) {
_implementation = OJB.getInstance();
Database database = _implementation.newDatabase(); try {
database.open("miniappAccess", Database.OPEN_READ_WRITE);
} catch(ODMGException odmge) {
throw new MiniappDBException(odmge);
}
}return _implementation; }
DList execute(String oql, Object[] parameters) throws MiniappDBException {
log.trace("execute started");
DList results = null;
Transaction tx = null;
try {
tx = getImplementation().newTransaction();
tx.begin();
OQLQuery query = getImplementation().newOQLQuery();
query.create(oql);
for (int index = 0; index < parameters.length; index++) {
query.bind(parameters[index]);
}
results = (DList) query.execute();
tx.commit();
} catch(QueryInvalidException qie) {
if (tx != null) {
tx.abort();
}
throw new MiniappDBException(qie);
} catch(QueryParameterCountInvalidException qpcie) {
if (tx != null) {
tx.abort();
}
throw new MiniappDBException(qpcie);
} catch(QueryException qe) {
if (tx != null) {
tx.abort();
}
throw new MiniappDBException(qe);
} catch(Exception e) {
if (tx != null) {
tx.abort();
}
throw new MiniappDBException(e);
}return results; }
Clayton Webb wrote:
For some reason, whenever I retrieve a user or users, the roles associated with that user get inserted, again, into the database. My repository_user.xml is included. I am using an anonymous key for the Role object. I originally thought this was happening because I had overridden equals and hashCode but I removed that and it still does it. What could I be doing wrong? Thanks in advance.
--clayton
<class-descriptor class="org.oscardog.miniapp.model.User" table="USERS" > <field-descriptor name="userName" column="USER_NAME" jdbc-type="VARCHAR" primarykey="true" /> <field-descriptor name="lastName" column="LAST_NAME" jdbc-type="VARCHAR" /> <field-descriptor name="firstName" column="FIRST_NAME" jdbc-type="VARCHAR" /> <field-descriptor name="password" column="PASSWORD" jdbc-type="VARCHAR" /> <collection-descriptor name="roles" element-class-ref="org.oscardog.miniapp.model.Role" auto-retrieve="true" auto-update="true" indirection-table="USERS_ROLES" > <fk-pointing-to-this-class column="USER_NAME"/> <fk-pointing-to-element-class column="ROLE_ID"/> </collection-descriptor> </class-descriptor>
<class-descriptor class="org.oscardog.miniapp.model.Role" table="ROLES" > <field-descriptor name="id" column="ID" jdbc-type="NUMERIC" primarykey="true" autoincrement="true" access="anonymous" /> <field-descriptor name="role" column="ROLE" jdbc-type="VARCHAR" /> <collection-descriptor name="users" element-class-ref="org.oscardog.miniapp.model.User" auto-retrieve="true" auto-update="true" indirection-table="USERS_ROLES" > <fk-pointing-to-this-class column="ROLE_ID"/> <fk-pointing-to-element-class column="USER_NAME"/> </collection-descriptor> </class-descriptor>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
