Hi everebody. I would like to contribute to the CVS repository but I've only read
access.
We've been in problems with M:N relations, a column name mismatched was raised and the
reason is inside PersistenceBrokerImpl.
The solution for the problem is use criteria.addEqualToField and not
criteria.addEqualToColumn inside method 'getMtoNQuery'.
private Query getMtoNQuery(Object obj, ClassDescriptor cld, CollectionDescriptor cod)
{
Object[] values = brokerHelper.getKeyValues(cld, obj);
Object[] thisClassFks = cod.getFksToThisClass();
Object[] itemClassFks = cod.getFksToItemClass();
ClassDescriptor refCld = getClassDescriptor(cod.getItemClass());
Criteria criteria = new Criteria();
Query query;
for (int i = 0; i < thisClassFks.length; i++)
{
criteria.addEqualTo(cod.getIndirectionTable() + "." + thisClassFks[i], values[i]);
}
for (int i = 0; i < itemClassFks.length; i++)
{
/*
criteria.addEqualToColumn(
cod.getIndirectionTable() + "." + itemClassFks[i].toString(),
refCld.getPkFields()[i].getAttributeName());*/
criteria.addEqualToField(
cod.getIndirectionTable() + "." + itemClassFks[i].toString(),
refCld.getPkFields()[i].getAttributeName());
}
query = QueryFactory.newQuery(refCld.getClassOfObject(), cod.getIndirectionTable(),
criteria);
return query;
}