You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Josef Wagner <jo...@on-ergy.de> on 2006/10/06 17:04:37 UTC
Problems generating sql with the SqlGenerator
Hi List,
i have written my one SqlGenerator, because i have to extend each query
width the criteria, that the status of the entry, which is described in
a seperate log-table is not 'DELETED'.
------------------
Problem
------------------
Now, my problem is, that the generated statemts are incorecct.
I extend from the SqlGeneratorDefaultImpl and override the Method
getPreparedSelectStatement as followed:
public String getPreparedSelectStatement(Query query, ClassDescriptor
cld) {
try {
if ((cld.getClassOfObject().newInstance() instanceof
LogableAbstractPoIfc)) {
query.getCriteria().addEqualTo("log.log_table",
OnErgySqlGenerator.getLogTable(cld.getClassOfObject()));
query.getCriteria().addNotEqualTo("log.log_status", "D");
}
} catch(Exception iaex) {
logger.warn("Statement wurde evtl. nicht korrekt
aufbereitet"); logger.warn(iaex); }
SqlCacheKey key = new SqlCacheKey(query, cld,
SqlCacheKey.TYPE_SELECT);
String result = (String) m_sqlCacheMap.get(key);
if (result == null) {
SqlStatement sql = new SqlSelectStatement(getPlatform(), cld,
query, logger);
result = sql.getStatement();
if (logger.isDebugEnabled()) {
logger.debug("SQL:" + result);
}
m_sqlCacheMap.put(key, result);
}
return result;
}
The following incorrect statment will be generated, wenn calling
new User(1).getGroups().size();
-------------
Incorrect generated sql-statement
-------------
SELECT count(*) FROM groups A0,users_groups INNER JOIN log
A1,users_groups ON A0.obj_id=A1.log_table_obj_id WHERE
(((users_groups.users_obj_id = 1) AND users_groups.groups_obj_id =
A0.obj_id) AND log_table = 'GrOUPS') AND log_funktion <> 'D'
------------
statement i would expect
------------
SELECT count(*) FROM groups A0 INNER JOIN log A1 ON
A0.obj_id=A1.log_table_obj_id INNER JOIN users_groups ON A0.obj_id=
users_groups.groups_obj_id WHERE (((users_groups.users_obj_id = 1) AND
users_groups.groups_obj_id = A0.obj_id) AND log_table = 'GROUPS') AND
log_funktion <> 'D'
---------------------------
Description to the tables
---------------------------
############## ##################### ##############
# groups # # groups_users # # users #
############## ##################### ##############
# int obj_id # # int groups_obj_id # # int obj_id #
############## # int users_obj_id # ##############
#########################
# log #
#########################
# int obj_id #
# int log_table_obj_id #
# string log_table #
# string log_status #
#########################
- table groups and table users are joined width the m-n-table groups_users
- for each data-entry, there is a entry in the log-table, which
describes the status of the data-entry (deleted, inserted...) the
repository.xml of groups and users have an collection-descrpitor to the
log-table with a query-optimizer vor verifing the source-table with
string log_table
<!-- 1-n to Log -->
<collection-descriptor
auto-retrieve="true"
auto-delete="object"
auto-update="object"
proxy="true"
name="log"
element-class-ref="de.on_ergy.lakon.data.model.Log"
>
<inverse-foreignkey field-ref="logTableObjId"/>
<query-customizer
class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
<attribute
attribute-name="logTable"
attribute-value="GROUPS"
/>
</query-customizer>
</collection-descriptor>
the query-customizer sets an and-criteria width log_table equals for
example "GROUPS"
--------------------------------------
groups_repostory.xml, users_repository is equal, only width other
parameters
-----------------------------------------
<class-descriptor class="de.on_ergy.lakon.data.model.Groups"
table="groups">
<field-descriptor name="objId" column="obj_id"
jdbc-type="INTEGER" primarykey="true"
autoincrement="true"></field-descriptor>
<!-- m - n users_groups to users -->
<collection-descriptor
name="users"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
element-class-ref="de.on_ergy.lakon.data.model.Users"
auto-retrieve="true"
auto-update="false"
auto-delete="link"
proxy="true"
indirection-table="users_groups"
>
<fk-pointing-to-this-class column="groups_obj_id"/>
<fk-pointing-to-element-class column="users_obj_id"/>
</collection-descriptor>
<!-- 1-n to log -->
<collection-descriptor
auto-retrieve="true"
auto-delete="object"
auto-update="object"
proxy="true"
name="log"
element-class-ref="de.on_ergy.lakon.data.model.Log"
>
<inverse-foreignkey field-ref="logTableObjId"/>
<query-customizer
class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
<attribute
attribute-name="logTable"
attribute-value="GROUPS"
/>
</query-customizer>
</collection-descriptor>
</class-descriptor>
---------------------
that complete repository.xml data are in attachment, but in german...
Thanks a lot for your help
Josef Wagner/ Germany
Re: Problems generating sql with the SqlGenerator
Posted by Armin Waibel <ar...@apache.org>.
Josef Wagner wrote:
> Hi Armin,
>
> yes, I have the problem only when adding my extension. Generally, all
> works fine.
> We have tried a other solution like this:
> -------------------------------------------------
> public String getPreparedSelectStatement(Query query, ClassDescriptor
> cld) {
> try {
> if ((cld.getClassOfObject().newInstance() instanceof
> LogableAbstractPoIfc)) {
> logQuery.setCriteria(new Criteria());
> logQuery.getCriteria().addEqualTo( "log_table",
> OnErgySqlGenerator.getLogTable(cld.getClassOfObject()));
> logQuery.getCriteria().addEqualTo("log_funktion", "D");
> logQuery.getCriteria().addEqualToColumn(log_table_obj_id,
> "A0.obj_id");
> query.getCriteria().addNotExists(logQuery);
> -------------------------------------------------
>
> Except of one Query, all works fine. In this one query, ojb works with
> two outer joins instead of in join and i can not set in join as
> preffered like query.setPathOutterJoin() :o/
>
> In my opinion, the old solution in my generator must also work, any idea??
>
Sorry I never worked on the "query/criteria stuff" (Jakob did the most
work on this section of OJB - currently he can't spend time for OJB).
You could try the OJB_1_0_RELEASE branch from SVN (upcoming 1.0.5) -
maybe your problem is fixed in this version.
regards,
Armin
> Thanks Armin for time you spend
> Josef
>
>
> Armin Waibel schrieb:
>> Hi Josef,
>>
>> could you clarify your problem: The generated sql is only invalid when
>> you add your extension or is the generated sql invalid in general?
>>
>> regards,
>> Armin
>>
>> Josef Wagner wrote:
>>> Hi List,
>>>
>>> i have written my one SqlGenerator, because i have to extend each
>>> query width the criteria, that the status of the entry, which is
>>> described in a seperate log-table is not 'DELETED'.
>>> ------------------
>>> Problem
>>> ------------------
>>> Now, my problem is, that the generated statemts are incorecct.
>>> I extend from the SqlGeneratorDefaultImpl and override the Method
>>> getPreparedSelectStatement as followed:
>>>
>>> public String getPreparedSelectStatement(Query query,
>>> ClassDescriptor cld) {
>>> try {
>>> if ((cld.getClassOfObject().newInstance() instanceof
>>> LogableAbstractPoIfc)) {
>>> query.getCriteria().addEqualTo("log.log_table",
>>> OnErgySqlGenerator.getLogTable(cld.getClassOfObject()));
>>> query.getCriteria().addNotEqualTo("log.log_status", "D");
>>> }
>>> } catch(Exception iaex) {
>>> logger.warn("Statement wurde evtl. nicht korrekt
>>> aufbereitet");
>>> logger.warn(iaex); }
>>> SqlCacheKey key = new SqlCacheKey(query, cld,
>>> SqlCacheKey.TYPE_SELECT);
>>> String result = (String) m_sqlCacheMap.get(key);
>>> if (result == null) {
>>> SqlStatement sql = new SqlSelectStatement(getPlatform(),
>>> cld, query, logger);
>>> result = sql.getStatement();
>>> if (logger.isDebugEnabled()) {
>>> logger.debug("SQL:" + result);
>>> }
>>> m_sqlCacheMap.put(key, result);
>>> }
>>> return result;
>>> }
>>>
>>> The following incorrect statment will be generated, wenn calling
>>> new User(1).getGroups().size();
>>>
>>> -------------
>>> Incorrect generated sql-statement
>>> -------------
>>> SELECT count(*) FROM groups A0,users_groups INNER JOIN log
>>> A1,users_groups ON A0.obj_id=A1.log_table_obj_id WHERE
>>> (((users_groups.users_obj_id = 1) AND users_groups.groups_obj_id =
>>> A0.obj_id) AND log_table = 'GrOUPS') AND log_funktion <> 'D'
>>>
>>> ------------
>>> statement i would expect
>>> ------------
>>> SELECT count(*) FROM groups A0 INNER JOIN log A1 ON
>>> A0.obj_id=A1.log_table_obj_id INNER JOIN users_groups ON A0.obj_id=
>>> users_groups.groups_obj_id WHERE (((users_groups.users_obj_id = 1)
>>> AND users_groups.groups_obj_id = A0.obj_id) AND log_table = 'GROUPS')
>>> AND log_funktion <> 'D'
>>>
>>> ---------------------------
>>> Description to the tables
>>> ---------------------------
>>>
>>>
>>> ############## ##################### ##############
>>> # groups # # groups_users # # users #
>>> ############## ##################### ##############
>>> # int obj_id # # int groups_obj_id # # int obj_id #
>>> ############## # int users_obj_id # ##############
>>>
>>>
>>> #########################
>>> # log #
>>> #########################
>>> # int obj_id #
>>> # int log_table_obj_id #
>>> # string log_table #
>>> # string log_status #
>>> #########################
>>>
>>> - table groups and table users are joined width the m-n-table
>>> groups_users
>>> - for each data-entry, there is a entry in the log-table, which
>>> describes the status of the data-entry (deleted, inserted...) the
>>> repository.xml of groups and users have an collection-descrpitor to
>>> the log-table with a query-optimizer vor verifing the source-table
>>> with string log_table
>>> <!-- 1-n to Log -->
>>> <collection-descriptor
>>> auto-retrieve="true"
>>> auto-delete="object"
>>> auto-update="object"
>>> proxy="true"
>>> name="log"
>>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>>> >
>>> <inverse-foreignkey field-ref="logTableObjId"/>
>>> <query-customizer
>>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>>> <attribute
>>> attribute-name="logTable"
>>> attribute-value="GROUPS"
>>> />
>>> </query-customizer>
>>> </collection-descriptor>
>>>
>>> the query-customizer sets an and-criteria width log_table equals for
>>> example "GROUPS"
>>>
>>>
>>> --------------------------------------
>>> groups_repostory.xml, users_repository is equal, only width other
>>> parameters
>>> -----------------------------------------
>>> <class-descriptor class="de.on_ergy.lakon.data.model.Groups"
>>> table="groups">
>>> <field-descriptor name="objId" column="obj_id"
>>> jdbc-type="INTEGER" primarykey="true"
>>> autoincrement="true"></field-descriptor>
>>>
>>> <!-- m - n users_groups to users -->
>>> <collection-descriptor
>>> name="users"
>>>
>>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>>
>>> element-class-ref="de.on_ergy.lakon.data.model.Users"
>>> auto-retrieve="true"
>>> auto-update="false"
>>> auto-delete="link"
>>> proxy="true"
>>> indirection-table="users_groups"
>>> >
>>> <fk-pointing-to-this-class column="groups_obj_id"/>
>>> <fk-pointing-to-element-class column="users_obj_id"/>
>>> </collection-descriptor> <!-- 1-n to log -->
>>> <collection-descriptor
>>> auto-retrieve="true"
>>> auto-delete="object"
>>> auto-update="object"
>>> proxy="true"
>>> name="log"
>>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>>> >
>>> <inverse-foreignkey field-ref="logTableObjId"/>
>>> <query-customizer
>>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>>> <attribute
>>> attribute-name="logTable"
>>> attribute-value="GROUPS"
>>> />
>>> </query-customizer>
>>> </collection-descriptor>
>>> </class-descriptor>
>>>
>>>
>>> ---------------------
>>> that complete repository.xml data are in attachment, but in german...
>>>
>>> Thanks a lot for your help
>>>
>>> Josef Wagner/ Germany
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> <class-descriptor class="de.on_ergy.lakon.data.model.Benutzer"
>>> table="benutzer">
>>> <field-descriptor name="objId" column="obj_id"
>>> jdbc-type="INTEGER" primarykey="true"
>>> autoincrement="true"></field-descriptor>
>>> <field-descriptor name="benutzerKz" column="benutzer_kz"
>>> jdbc-type="VARCHAR" length="6" ></field-descriptor>
>>> <field-descriptor name="vorName" column="vorname"
>>> jdbc-type="VARCHAR" length="50" ></field-descriptor>
>>> <field-descriptor name="nachName" column="nachname"
>>> jdbc-type="VARCHAR" length="50" ></field-descriptor>
>>> <field-descriptor name="passwort" column="passwort"
>>> jdbc-type="VARCHAR" length="50" ></field-descriptor>
>>> <field-descriptor name="memoObjId" column="memo_obj_id"
>>> jdbc-type="INTEGER" ></field-descriptor>
>>> <field-descriptor name="spracheObjId"
>>> column="sprache_obj_id" jdbc-type="INTEGER"
>>> ></field-descriptor>
>>> <!-- Referenz auf den Memotexts -->
>>> <reference-descriptor
>>> auto-delete="object"
>>> auto-update="object"
>>> proxy="true"
>>> name="memotext"
>>> class-ref="de.on_ergy.lakon.data.model.Memotexte"
>>> >
>>> <foreignkey field-ref="memoObjId"/>
>>> </reference-descriptor> <!-- Referenz auf die Sprache -->
>>> <reference-descriptor
>>> proxy="true"
>>> name="sprache"
>>> class-ref="de.on_ergy.lakon.data.model.Sprache"
>>> >
>>> <foreignkey field-ref="spracheObjId"/>
>>> </reference-descriptor> <!-- m - n ÃŒber benutzer_gruppen
>>> zu gruppen -->
>>> <collection-descriptor
>>> name="gruppen"
>>>
>>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>>
>>> element-class-ref="de.on_ergy.lakon.data.model.Gruppen"
>>> auto-retrieve="true"
>>> auto-update="false"
>>> auto-delete="link"
>>> proxy="true"
>>> indirection-table="benutzer_gruppen"
>>> >
>>> <fk-pointing-to-this-class column="benutzer_obj_id"/>
>>> <fk-pointing-to-element-class column="gruppen_obj_id"/>
>>> </collection-descriptor> <!-- m - n ÃŒber benutzer_teams zu den
>>> Teams -->
>>> <collection-descriptor
>>> name="teams"
>>>
>>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>>
>>> element-class-ref="de.on_ergy.lakon.data.model.Teams"
>>> auto-retrieve="true"
>>> auto-update="false"
>>> auto-delete="link"
>>> proxy="true"
>>> indirection-table="benutzer_teams"
>>> >
>>> <fk-pointing-to-this-class column="benutzer_obj_id"/>
>>> <fk-pointing-to-element-class column="team_obj_id"/>
>>> </collection-descriptor> <!--
>>> 1-n-Beziehung zu dem Log -->
>>> <collection-descriptor
>>> auto-retrieve="true"
>>> auto-delete="object"
>>> auto-update="object"
>>> proxy="true"
>>> name="log"
>>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>>> >
>>> <inverse-foreignkey field-ref="logKlasseObjId"/>
>>> <query-customizer
>>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>>> <!-- Achtung, diesen Werte bitte aus Klasse Tabellentyp
>>> entnehmen -->
>>> <attribute
>>> attribute-name="logTable"
>>> attribute-value="BENUTZER"
>>> />
>>> </query-customizer>
>>> </collection-descriptor>
>>> </class-descriptor>
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> <class-descriptor class="de.on_ergy.lakon.data.model.Gruppen"
>>> table="gruppen">
>>> <field-descriptor name="objId" column="obj_id"
>>> jdbc-type="INTEGER" primarykey="true"
>>> autoincrement="true"></field-descriptor>
>>> <field-descriptor name="gruppeKz" column="gruppe_kz"
>>> jdbc-type="CHAR" length="12" ></field-descriptor>
>>> <field-descriptor name="standard" column="standard"
>>> jdbc-type="BIT" ></field-descriptor>
>>> <field-descriptor name="memoObjId"
>>> column="memo_obj_id" jdbc-type="INTEGER"
>>> ></field-descriptor>
>>> <!-- 1-n Referenz auf die Bezeichnungen -->
>>> <collection-descriptor
>>> auto-delete="object"
>>> auto-update="object"
>>> proxy="true"
>>> name="bezeichnungen"
>>> element-class-ref="de.on_ergy.lakon.data.model.Bezeichnungen"
>>> orderby="sprach_obj_id"
>>> sort="ASC"
>>> >
>>> <inverse-foreignkey field-ref="parentObjId"/>
>>> <query-customizer
>>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>>> <!-- Achtung, diesen Werte bitte der Schnittstelle
>>> TabellentypAttributeIfc entnehmen -->
>>> <attribute
>>> attribute-name="parentTabKz"
>>> attribute-value="GRUPPEN"
>>> />
>>> </query-customizer>
>>> </collection-descriptor>
>>> <!-- Referenz auf den Memotexts -->
>>> <reference-descriptor
>>> auto-delete="object"
>>> auto-update="object"
>>> proxy="true"
>>> name="memotext"
>>> class-ref="de.on_ergy.lakon.data.model.Memotexte"
>>> >
>>> <foreignkey field-ref="memoObjId"/>
>>> </reference-descriptor>
>>> <!-- m - n ÃŒber benutzer_gruppen zu Benutzer -->
>>> <collection-descriptor
>>> name="benutzer"
>>>
>>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>>
>>> element-class-ref="de.on_ergy.lakon.data.model.Benutzer"
>>> auto-retrieve="true"
>>> auto-update="false"
>>> auto-delete="link"
>>> proxy="true"
>>> indirection-table="benutzer_gruppen"
>>> >
>>> <fk-pointing-to-this-class column="gruppen_obj_id"/>
>>> <fk-pointing-to-element-class column="benutzer_obj_id"/>
>>> </collection-descriptor>
>>> <!-- m - n ÃŒber gruppen_rollen zu rollen -->
>>> <collection-descriptor
>>> name="rollen"
>>>
>>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>>
>>> element-class-ref="de.on_ergy.lakon.data.model.Rollen"
>>> auto-retrieve="true"
>>> auto-update="false"
>>> auto-delete="link"
>>> proxy="true"
>>> indirection-table="gruppen_rollen"
>>> >
>>> <fk-pointing-to-this-class column="gruppen_obj_id"/>
>>> <fk-pointing-to-element-class column="rollen_obj_id"/>
>>> </collection-descriptor> <!-- 1-n-Beziehung zu dem
>>> Log -->
>>> <collection-descriptor
>>> auto-retrieve="true"
>>> auto-delete="object"
>>> auto-update="object"
>>> proxy="true"
>>> name="log"
>>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>>> >
>>> <inverse-foreignkey field-ref="logKlasseObjId"/>
>>> <query-customizer
>>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>>> <!-- Achtung, diesen Werte bitte aus Klasse Tabellentyp
>>> entnehmen -->
>>> <attribute
>>> attribute-name="logTable"
>>> attribute-value="GRUPPEN"
>>> />
>>> </query-customizer>
>>> </collection-descriptor>
>>> </class-descriptor>
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> <class-descriptor class="de.on_ergy.lakon.data.model.Log" table="log">
>>> <field-descriptor name="objId" column="obj_id"
>>> jdbc-type="INTEGER" primarykey="true"
>>> autoincrement="true"></field-descriptor>
>>> <field-descriptor name="logBenutzerObjId"
>>> column="log_benutzer_obj_id"
>>> jdbc-type="INTEGER"></field-descriptor>
>>> <field-descriptor name="logKlasseObjId"
>>> column="log_klasse_obj_id" jdbc-type="INTEGER"></field-descriptor>
>>> <field-descriptor name="mnObjId"
>>> column="m_n_obj_id" jdbc-type="INTEGER"
>>> ></field-descriptor>
>>> <field-descriptor name="logTable" column="log_table"
>>> jdbc-type="VARCHAR" length="8"></field-descriptor>
>>> <field-descriptor name="logFunktion" column="log_funktion"
>>> jdbc-type="CHAR" length="1" ></field-descriptor>
>>> <field-descriptor name="logDataDefault"
>>> column="log_data_default" jdbc-type="VARCHAR" length="65535"
>>> ></field-descriptor> <field-descriptor name="logDataExport"
>>> column="log_data_export" jdbc-type="VARCHAR" length="65535"
>>> ></field-descriptor> <field-descriptor
>>> name="erstelltTimestamp" column="erstellt_timestamp"
>>> jdbc-type="TIMESTAMP" ></field-descriptor>
>>> <field-descriptor name="letzteAenderungTimestamp"
>>> column="letzte_aenderung_timestamp"
>>> jdbc-type="TIMESTAMP" ></field-descriptor>
>>> </class-descriptor>
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Problems generating sql with the SqlGenerator
Posted by Josef Wagner <jo...@on-ergy.de>.
Hi Armin,
yes, I have the problem only when adding my extension. Generally, all
works fine.
We have tried a other solution like this:
-------------------------------------------------
public String getPreparedSelectStatement(Query query, ClassDescriptor
cld) {
try {
if ((cld.getClassOfObject().newInstance() instanceof
LogableAbstractPoIfc)) {
logQuery.setCriteria(new Criteria());
logQuery.getCriteria().addEqualTo( "log_table",
OnErgySqlGenerator.getLogTable(cld.getClassOfObject()));
logQuery.getCriteria().addEqualTo("log_funktion", "D");
logQuery.getCriteria().addEqualToColumn(log_table_obj_id,
"A0.obj_id");
query.getCriteria().addNotExists(logQuery);
-------------------------------------------------
Except of one Query, all works fine. In this one query, ojb works with
two outer joins instead of in join and i can not set in join as
preffered like query.setPathOutterJoin() :o/
In my opinion, the old solution in my generator must also work, any idea??
Thanks Armin for time you spend
Josef
Armin Waibel schrieb:
> Hi Josef,
>
> could you clarify your problem: The generated sql is only invalid when
> you add your extension or is the generated sql invalid in general?
>
> regards,
> Armin
>
> Josef Wagner wrote:
>> Hi List,
>>
>> i have written my one SqlGenerator, because i have to extend each
>> query width the criteria, that the status of the entry, which is
>> described in a seperate log-table is not 'DELETED'.
>> ------------------
>> Problem
>> ------------------
>> Now, my problem is, that the generated statemts are incorecct.
>> I extend from the SqlGeneratorDefaultImpl and override the Method
>> getPreparedSelectStatement as followed:
>>
>> public String getPreparedSelectStatement(Query query,
>> ClassDescriptor cld) {
>> try {
>> if ((cld.getClassOfObject().newInstance() instanceof
>> LogableAbstractPoIfc)) {
>> query.getCriteria().addEqualTo("log.log_table",
>> OnErgySqlGenerator.getLogTable(cld.getClassOfObject()));
>> query.getCriteria().addNotEqualTo("log.log_status", "D");
>> }
>> } catch(Exception iaex) {
>> logger.warn("Statement wurde evtl. nicht korrekt
>> aufbereitet");
>> logger.warn(iaex); }
>> SqlCacheKey key = new SqlCacheKey(query, cld,
>> SqlCacheKey.TYPE_SELECT);
>> String result = (String) m_sqlCacheMap.get(key);
>> if (result == null) {
>> SqlStatement sql = new SqlSelectStatement(getPlatform(),
>> cld, query, logger);
>> result = sql.getStatement();
>> if (logger.isDebugEnabled()) {
>> logger.debug("SQL:" + result);
>> }
>> m_sqlCacheMap.put(key, result);
>> }
>> return result;
>> }
>>
>> The following incorrect statment will be generated, wenn calling
>> new User(1).getGroups().size();
>>
>> -------------
>> Incorrect generated sql-statement
>> -------------
>> SELECT count(*) FROM groups A0,users_groups INNER JOIN log
>> A1,users_groups ON A0.obj_id=A1.log_table_obj_id WHERE
>> (((users_groups.users_obj_id = 1) AND users_groups.groups_obj_id =
>> A0.obj_id) AND log_table = 'GrOUPS') AND log_funktion <> 'D'
>>
>> ------------
>> statement i would expect
>> ------------
>> SELECT count(*) FROM groups A0 INNER JOIN log A1 ON
>> A0.obj_id=A1.log_table_obj_id INNER JOIN users_groups ON A0.obj_id=
>> users_groups.groups_obj_id WHERE (((users_groups.users_obj_id = 1)
>> AND users_groups.groups_obj_id = A0.obj_id) AND log_table = 'GROUPS')
>> AND log_funktion <> 'D'
>>
>> ---------------------------
>> Description to the tables
>> ---------------------------
>>
>>
>> ############## ##################### ##############
>> # groups # # groups_users # # users #
>> ############## ##################### ##############
>> # int obj_id # # int groups_obj_id # # int obj_id #
>> ############## # int users_obj_id # ##############
>>
>>
>> #########################
>> # log #
>> #########################
>> # int obj_id #
>> # int log_table_obj_id #
>> # string log_table #
>> # string log_status #
>> #########################
>>
>> - table groups and table users are joined width the m-n-table
>> groups_users
>> - for each data-entry, there is a entry in the log-table, which
>> describes the status of the data-entry (deleted, inserted...) the
>> repository.xml of groups and users have an collection-descrpitor to
>> the log-table with a query-optimizer vor verifing the source-table
>> with string log_table
>> <!-- 1-n to Log -->
>> <collection-descriptor
>> auto-retrieve="true"
>> auto-delete="object"
>> auto-update="object"
>> proxy="true"
>> name="log"
>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>> >
>> <inverse-foreignkey field-ref="logTableObjId"/>
>> <query-customizer
>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>> <attribute
>> attribute-name="logTable"
>> attribute-value="GROUPS"
>> />
>> </query-customizer>
>> </collection-descriptor>
>>
>> the query-customizer sets an and-criteria width log_table equals for
>> example "GROUPS"
>>
>>
>> --------------------------------------
>> groups_repostory.xml, users_repository is equal, only width other
>> parameters
>> -----------------------------------------
>> <class-descriptor class="de.on_ergy.lakon.data.model.Groups"
>> table="groups">
>> <field-descriptor name="objId" column="obj_id"
>> jdbc-type="INTEGER" primarykey="true"
>> autoincrement="true"></field-descriptor>
>>
>> <!-- m - n users_groups to users -->
>> <collection-descriptor
>> name="users"
>>
>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>
>> element-class-ref="de.on_ergy.lakon.data.model.Users"
>> auto-retrieve="true"
>> auto-update="false"
>> auto-delete="link"
>> proxy="true"
>> indirection-table="users_groups"
>> >
>> <fk-pointing-to-this-class column="groups_obj_id"/>
>> <fk-pointing-to-element-class column="users_obj_id"/>
>> </collection-descriptor> <!-- 1-n to log -->
>> <collection-descriptor
>> auto-retrieve="true"
>> auto-delete="object"
>> auto-update="object"
>> proxy="true"
>> name="log"
>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>> >
>> <inverse-foreignkey field-ref="logTableObjId"/>
>> <query-customizer
>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>> <attribute
>> attribute-name="logTable"
>> attribute-value="GROUPS"
>> />
>> </query-customizer>
>> </collection-descriptor>
>> </class-descriptor>
>>
>>
>> ---------------------
>> that complete repository.xml data are in attachment, but in german...
>>
>> Thanks a lot for your help
>>
>> Josef Wagner/ Germany
>>
>>
>> ------------------------------------------------------------------------
>>
>> <class-descriptor class="de.on_ergy.lakon.data.model.Benutzer"
>> table="benutzer">
>> <field-descriptor name="objId" column="obj_id"
>> jdbc-type="INTEGER" primarykey="true"
>> autoincrement="true"></field-descriptor>
>> <field-descriptor name="benutzerKz" column="benutzer_kz"
>> jdbc-type="VARCHAR" length="6" ></field-descriptor>
>> <field-descriptor name="vorName" column="vorname"
>> jdbc-type="VARCHAR" length="50" ></field-descriptor>
>> <field-descriptor name="nachName" column="nachname"
>> jdbc-type="VARCHAR" length="50" ></field-descriptor>
>> <field-descriptor name="passwort" column="passwort"
>> jdbc-type="VARCHAR" length="50" ></field-descriptor>
>> <field-descriptor name="memoObjId" column="memo_obj_id"
>> jdbc-type="INTEGER" ></field-descriptor>
>> <field-descriptor name="spracheObjId"
>> column="sprache_obj_id" jdbc-type="INTEGER"
>> ></field-descriptor>
>> <!-- Referenz auf den Memotexts -->
>> <reference-descriptor
>> auto-delete="object"
>> auto-update="object"
>> proxy="true"
>> name="memotext"
>> class-ref="de.on_ergy.lakon.data.model.Memotexte"
>> >
>> <foreignkey field-ref="memoObjId"/>
>> </reference-descriptor> <!-- Referenz auf die Sprache -->
>> <reference-descriptor
>> proxy="true"
>> name="sprache"
>> class-ref="de.on_ergy.lakon.data.model.Sprache"
>> >
>> <foreignkey field-ref="spracheObjId"/>
>> </reference-descriptor> <!-- m - n ÃŒber benutzer_gruppen
>> zu gruppen -->
>> <collection-descriptor
>> name="gruppen"
>>
>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>
>> element-class-ref="de.on_ergy.lakon.data.model.Gruppen"
>> auto-retrieve="true"
>> auto-update="false"
>> auto-delete="link"
>> proxy="true"
>> indirection-table="benutzer_gruppen"
>> >
>> <fk-pointing-to-this-class column="benutzer_obj_id"/>
>> <fk-pointing-to-element-class column="gruppen_obj_id"/>
>> </collection-descriptor>
>> <!-- m - n ÃŒber benutzer_teams zu den Teams -->
>> <collection-descriptor
>> name="teams"
>>
>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>
>> element-class-ref="de.on_ergy.lakon.data.model.Teams"
>> auto-retrieve="true"
>> auto-update="false"
>> auto-delete="link"
>> proxy="true"
>> indirection-table="benutzer_teams"
>> >
>> <fk-pointing-to-this-class column="benutzer_obj_id"/>
>> <fk-pointing-to-element-class column="team_obj_id"/>
>> </collection-descriptor>
>> <!-- 1-n-Beziehung zu dem Log -->
>> <collection-descriptor
>> auto-retrieve="true"
>> auto-delete="object"
>> auto-update="object"
>> proxy="true"
>> name="log"
>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>> >
>> <inverse-foreignkey field-ref="logKlasseObjId"/>
>> <query-customizer
>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>> <!-- Achtung, diesen Werte bitte aus Klasse Tabellentyp
>> entnehmen -->
>> <attribute
>> attribute-name="logTable"
>> attribute-value="BENUTZER"
>> />
>> </query-customizer>
>> </collection-descriptor>
>>
>> </class-descriptor>
>>
>>
>> ------------------------------------------------------------------------
>>
>> <class-descriptor class="de.on_ergy.lakon.data.model.Gruppen"
>> table="gruppen">
>> <field-descriptor name="objId" column="obj_id"
>> jdbc-type="INTEGER" primarykey="true"
>> autoincrement="true"></field-descriptor>
>> <field-descriptor name="gruppeKz" column="gruppe_kz"
>> jdbc-type="CHAR" length="12" ></field-descriptor>
>> <field-descriptor name="standard" column="standard"
>> jdbc-type="BIT" ></field-descriptor>
>> <field-descriptor name="memoObjId"
>> column="memo_obj_id" jdbc-type="INTEGER"
>> ></field-descriptor>
>> <!-- 1-n Referenz auf die Bezeichnungen -->
>> <collection-descriptor
>> auto-delete="object"
>> auto-update="object"
>> proxy="true"
>> name="bezeichnungen"
>> element-class-ref="de.on_ergy.lakon.data.model.Bezeichnungen"
>> orderby="sprach_obj_id"
>> sort="ASC"
>> >
>> <inverse-foreignkey field-ref="parentObjId"/>
>> <query-customizer
>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>> <!-- Achtung, diesen Werte bitte der Schnittstelle
>> TabellentypAttributeIfc entnehmen -->
>> <attribute
>> attribute-name="parentTabKz"
>> attribute-value="GRUPPEN"
>> />
>> </query-customizer>
>> </collection-descriptor>
>> <!-- Referenz auf den Memotexts -->
>> <reference-descriptor
>> auto-delete="object"
>> auto-update="object"
>> proxy="true"
>> name="memotext"
>> class-ref="de.on_ergy.lakon.data.model.Memotexte"
>> >
>> <foreignkey field-ref="memoObjId"/>
>> </reference-descriptor>
>> <!-- m - n ÃŒber benutzer_gruppen zu Benutzer -->
>> <collection-descriptor
>> name="benutzer"
>>
>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>
>> element-class-ref="de.on_ergy.lakon.data.model.Benutzer"
>> auto-retrieve="true"
>> auto-update="false"
>> auto-delete="link"
>> proxy="true"
>> indirection-table="benutzer_gruppen"
>> >
>> <fk-pointing-to-this-class column="gruppen_obj_id"/>
>> <fk-pointing-to-element-class column="benutzer_obj_id"/>
>> </collection-descriptor>
>>
>> <!-- m - n ÃŒber gruppen_rollen zu rollen -->
>> <collection-descriptor
>> name="rollen"
>>
>> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>>
>> element-class-ref="de.on_ergy.lakon.data.model.Rollen"
>> auto-retrieve="true"
>> auto-update="false"
>> auto-delete="link"
>> proxy="true"
>> indirection-table="gruppen_rollen"
>> >
>> <fk-pointing-to-this-class column="gruppen_obj_id"/>
>> <fk-pointing-to-element-class column="rollen_obj_id"/>
>> </collection-descriptor>
>> <!-- 1-n-Beziehung zu dem Log -->
>> <collection-descriptor
>> auto-retrieve="true"
>> auto-delete="object"
>> auto-update="object"
>> proxy="true"
>> name="log"
>> element-class-ref="de.on_ergy.lakon.data.model.Log"
>> >
>> <inverse-foreignkey field-ref="logKlasseObjId"/>
>> <query-customizer
>> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
>> <!-- Achtung, diesen Werte bitte aus Klasse Tabellentyp
>> entnehmen -->
>> <attribute
>> attribute-name="logTable"
>> attribute-value="GRUPPEN"
>> />
>> </query-customizer>
>> </collection-descriptor>
>>
>> </class-descriptor>
>>
>>
>> ------------------------------------------------------------------------
>>
>> <class-descriptor class="de.on_ergy.lakon.data.model.Log" table="log">
>> <field-descriptor name="objId" column="obj_id"
>> jdbc-type="INTEGER" primarykey="true"
>> autoincrement="true"></field-descriptor>
>> <field-descriptor name="logBenutzerObjId"
>> column="log_benutzer_obj_id"
>> jdbc-type="INTEGER"></field-descriptor>
>> <field-descriptor name="logKlasseObjId"
>> column="log_klasse_obj_id" jdbc-type="INTEGER"></field-descriptor>
>> <field-descriptor name="mnObjId"
>> column="m_n_obj_id" jdbc-type="INTEGER"
>> ></field-descriptor>
>> <field-descriptor name="logTable" column="log_table"
>> jdbc-type="VARCHAR" length="8"></field-descriptor>
>> <field-descriptor name="logFunktion" column="log_funktion"
>> jdbc-type="CHAR" length="1" ></field-descriptor>
>> <field-descriptor name="logDataDefault"
>> column="log_data_default" jdbc-type="VARCHAR" length="65535"
>> ></field-descriptor>
>> <field-descriptor name="logDataExport"
>> column="log_data_export" jdbc-type="VARCHAR" length="65535"
>> ></field-descriptor>
>> <field-descriptor name="erstelltTimestamp"
>> column="erstellt_timestamp" jdbc-type="TIMESTAMP"
>> ></field-descriptor>
>> <field-descriptor name="letzteAenderungTimestamp"
>> column="letzte_aenderung_timestamp"
>> jdbc-type="TIMESTAMP" ></field-descriptor>
>> </class-descriptor>
>>
>>
>> ------------------------------------------------------------------------
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: ojb-user-help@db.apache.org
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
>
--
Josef Wagner
On Ergy Systemberatung GmbH
Füssener Str. 31
87459 Pfronten
Tel.: 08363 92898 - 57
Fax.: 08363 92898 - 51
E-Mail: j.wagner@on-ergy.de
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Problems generating sql with the SqlGenerator
Posted by Armin Waibel <ar...@apache.org>.
Hi Josef,
could you clarify your problem: The generated sql is only invalid when
you add your extension or is the generated sql invalid in general?
regards,
Armin
Josef Wagner wrote:
> Hi List,
>
> i have written my one SqlGenerator, because i have to extend each query
> width the criteria, that the status of the entry, which is described in
> a seperate log-table is not 'DELETED'.
> ------------------
> Problem
> ------------------
> Now, my problem is, that the generated statemts are incorecct.
> I extend from the SqlGeneratorDefaultImpl and override the Method
> getPreparedSelectStatement as followed:
>
> public String getPreparedSelectStatement(Query query, ClassDescriptor
> cld) {
> try {
> if ((cld.getClassOfObject().newInstance() instanceof
> LogableAbstractPoIfc)) {
> query.getCriteria().addEqualTo("log.log_table",
> OnErgySqlGenerator.getLogTable(cld.getClassOfObject()));
> query.getCriteria().addNotEqualTo("log.log_status", "D");
> }
> } catch(Exception iaex) {
> logger.warn("Statement wurde evtl. nicht korrekt
> aufbereitet"); logger.warn(iaex); }
> SqlCacheKey key = new SqlCacheKey(query, cld,
> SqlCacheKey.TYPE_SELECT);
> String result = (String) m_sqlCacheMap.get(key);
> if (result == null) {
> SqlStatement sql = new SqlSelectStatement(getPlatform(), cld,
> query, logger);
> result = sql.getStatement();
> if (logger.isDebugEnabled()) {
> logger.debug("SQL:" + result);
> }
> m_sqlCacheMap.put(key, result);
> }
> return result;
> }
>
> The following incorrect statment will be generated, wenn calling
> new User(1).getGroups().size();
>
> -------------
> Incorrect generated sql-statement
> -------------
> SELECT count(*) FROM groups A0,users_groups INNER JOIN log
> A1,users_groups ON A0.obj_id=A1.log_table_obj_id WHERE
> (((users_groups.users_obj_id = 1) AND users_groups.groups_obj_id =
> A0.obj_id) AND log_table = 'GrOUPS') AND log_funktion <> 'D'
>
> ------------
> statement i would expect
> ------------
> SELECT count(*) FROM groups A0 INNER JOIN log A1 ON
> A0.obj_id=A1.log_table_obj_id INNER JOIN users_groups ON A0.obj_id=
> users_groups.groups_obj_id WHERE (((users_groups.users_obj_id = 1) AND
> users_groups.groups_obj_id = A0.obj_id) AND log_table = 'GROUPS') AND
> log_funktion <> 'D'
>
> ---------------------------
> Description to the tables
> ---------------------------
>
>
> ############## ##################### ##############
> # groups # # groups_users # # users #
> ############## ##################### ##############
> # int obj_id # # int groups_obj_id # # int obj_id #
> ############## # int users_obj_id # ##############
>
>
> #########################
> # log #
> #########################
> # int obj_id #
> # int log_table_obj_id #
> # string log_table #
> # string log_status #
> #########################
>
> - table groups and table users are joined width the m-n-table groups_users
> - for each data-entry, there is a entry in the log-table, which
> describes the status of the data-entry (deleted, inserted...) the
> repository.xml of groups and users have an collection-descrpitor to the
> log-table with a query-optimizer vor verifing the source-table with
> string log_table
> <!-- 1-n to Log -->
> <collection-descriptor
> auto-retrieve="true"
> auto-delete="object"
> auto-update="object"
> proxy="true"
> name="log"
> element-class-ref="de.on_ergy.lakon.data.model.Log"
> >
> <inverse-foreignkey field-ref="logTableObjId"/>
> <query-customizer
> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
> <attribute
> attribute-name="logTable"
> attribute-value="GROUPS"
> />
> </query-customizer>
> </collection-descriptor>
>
> the query-customizer sets an and-criteria width log_table equals for
> example "GROUPS"
>
>
> --------------------------------------
> groups_repostory.xml, users_repository is equal, only width other
> parameters
> -----------------------------------------
> <class-descriptor class="de.on_ergy.lakon.data.model.Groups"
> table="groups">
> <field-descriptor name="objId" column="obj_id"
> jdbc-type="INTEGER" primarykey="true"
> autoincrement="true"></field-descriptor>
>
> <!-- m - n users_groups to users -->
> <collection-descriptor
> name="users"
>
> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
>
> element-class-ref="de.on_ergy.lakon.data.model.Users"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="link"
> proxy="true"
> indirection-table="users_groups"
> >
> <fk-pointing-to-this-class column="groups_obj_id"/>
> <fk-pointing-to-element-class column="users_obj_id"/>
> </collection-descriptor> <!-- 1-n to log -->
> <collection-descriptor
> auto-retrieve="true"
> auto-delete="object"
> auto-update="object"
> proxy="true"
> name="log"
> element-class-ref="de.on_ergy.lakon.data.model.Log"
> >
> <inverse-foreignkey field-ref="logTableObjId"/>
> <query-customizer
> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
> <attribute
> attribute-name="logTable"
> attribute-value="GROUPS"
> />
> </query-customizer>
> </collection-descriptor>
> </class-descriptor>
>
>
> ---------------------
> that complete repository.xml data are in attachment, but in german...
>
> Thanks a lot for your help
>
> Josef Wagner/ Germany
>
>
> ------------------------------------------------------------------------
>
> <class-descriptor class="de.on_ergy.lakon.data.model.Benutzer" table="benutzer">
> <field-descriptor name="objId" column="obj_id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"></field-descriptor>
> <field-descriptor name="benutzerKz" column="benutzer_kz" jdbc-type="VARCHAR" length="6" ></field-descriptor>
> <field-descriptor name="vorName" column="vorname" jdbc-type="VARCHAR" length="50" ></field-descriptor>
> <field-descriptor name="nachName" column="nachname" jdbc-type="VARCHAR" length="50" ></field-descriptor>
> <field-descriptor name="passwort" column="passwort" jdbc-type="VARCHAR" length="50" ></field-descriptor>
> <field-descriptor name="memoObjId" column="memo_obj_id" jdbc-type="INTEGER" ></field-descriptor>
> <field-descriptor name="spracheObjId" column="sprache_obj_id" jdbc-type="INTEGER" ></field-descriptor>
> <!-- Referenz auf den Memotexts -->
> <reference-descriptor
> auto-delete="object"
> auto-update="object"
> proxy="true"
> name="memotext"
> class-ref="de.on_ergy.lakon.data.model.Memotexte"
> >
> <foreignkey field-ref="memoObjId"/>
> </reference-descriptor>
> <!-- Referenz auf die Sprache -->
> <reference-descriptor
> proxy="true"
> name="sprache"
> class-ref="de.on_ergy.lakon.data.model.Sprache"
> >
> <foreignkey field-ref="spracheObjId"/>
> </reference-descriptor>
> <!-- m - n ÃŒber benutzer_gruppen zu gruppen -->
> <collection-descriptor
> name="gruppen"
> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
> element-class-ref="de.on_ergy.lakon.data.model.Gruppen"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="link"
> proxy="true"
> indirection-table="benutzer_gruppen"
> >
> <fk-pointing-to-this-class column="benutzer_obj_id"/>
> <fk-pointing-to-element-class column="gruppen_obj_id"/>
> </collection-descriptor>
>
> <!-- m - n ÃŒber benutzer_teams zu den Teams -->
> <collection-descriptor
> name="teams"
> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
> element-class-ref="de.on_ergy.lakon.data.model.Teams"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="link"
> proxy="true"
> indirection-table="benutzer_teams"
> >
> <fk-pointing-to-this-class column="benutzer_obj_id"/>
> <fk-pointing-to-element-class column="team_obj_id"/>
> </collection-descriptor>
>
> <!-- 1-n-Beziehung zu dem Log -->
> <collection-descriptor
> auto-retrieve="true"
> auto-delete="object"
> auto-update="object"
> proxy="true"
> name="log"
> element-class-ref="de.on_ergy.lakon.data.model.Log"
> >
> <inverse-foreignkey field-ref="logKlasseObjId"/>
> <query-customizer
> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
> <!-- Achtung, diesen Werte bitte aus Klasse Tabellentyp entnehmen -->
> <attribute
> attribute-name="logTable"
> attribute-value="BENUTZER"
> />
> </query-customizer>
>
> </collection-descriptor>
>
> </class-descriptor>
>
>
> ------------------------------------------------------------------------
>
> <class-descriptor class="de.on_ergy.lakon.data.model.Gruppen" table="gruppen">
> <field-descriptor name="objId" column="obj_id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"></field-descriptor>
> <field-descriptor name="gruppeKz" column="gruppe_kz" jdbc-type="CHAR" length="12" ></field-descriptor>
> <field-descriptor name="standard" column="standard" jdbc-type="BIT" ></field-descriptor>
> <field-descriptor name="memoObjId" column="memo_obj_id" jdbc-type="INTEGER" ></field-descriptor>
> <!-- 1-n Referenz auf die Bezeichnungen -->
> <collection-descriptor
> auto-delete="object"
> auto-update="object"
> proxy="true"
> name="bezeichnungen"
> element-class-ref="de.on_ergy.lakon.data.model.Bezeichnungen"
> orderby="sprach_obj_id"
> sort="ASC"
> >
> <inverse-foreignkey field-ref="parentObjId"/>
> <query-customizer
> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
> <!-- Achtung, diesen Werte bitte der Schnittstelle TabellentypAttributeIfc entnehmen -->
> <attribute
> attribute-name="parentTabKz"
> attribute-value="GRUPPEN"
> />
> </query-customizer>
>
> </collection-descriptor>
> <!-- Referenz auf den Memotexts -->
> <reference-descriptor
> auto-delete="object"
> auto-update="object"
> proxy="true"
> name="memotext"
> class-ref="de.on_ergy.lakon.data.model.Memotexte"
> >
> <foreignkey field-ref="memoObjId"/>
> </reference-descriptor>
>
> <!-- m - n ÃŒber benutzer_gruppen zu Benutzer -->
> <collection-descriptor
> name="benutzer"
> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
> element-class-ref="de.on_ergy.lakon.data.model.Benutzer"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="link"
> proxy="true"
> indirection-table="benutzer_gruppen"
> >
> <fk-pointing-to-this-class column="gruppen_obj_id"/>
> <fk-pointing-to-element-class column="benutzer_obj_id"/>
> </collection-descriptor>
>
>
> <!-- m - n ÃŒber gruppen_rollen zu rollen -->
> <collection-descriptor
> name="rollen"
> collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList"
> element-class-ref="de.on_ergy.lakon.data.model.Rollen"
> auto-retrieve="true"
> auto-update="false"
> auto-delete="link"
> proxy="true"
> indirection-table="gruppen_rollen"
> >
> <fk-pointing-to-this-class column="gruppen_obj_id"/>
> <fk-pointing-to-element-class column="rollen_obj_id"/>
> </collection-descriptor>
>
> <!-- 1-n-Beziehung zu dem Log -->
> <collection-descriptor
> auto-retrieve="true"
> auto-delete="object"
> auto-update="object"
> proxy="true"
> name="log"
> element-class-ref="de.on_ergy.lakon.data.model.Log"
> >
> <inverse-foreignkey field-ref="logKlasseObjId"/>
> <query-customizer
> class="de.on_ergy.lakon.data.QueryCustomizerLakonImpl">
> <!-- Achtung, diesen Werte bitte aus Klasse Tabellentyp entnehmen -->
> <attribute
> attribute-name="logTable"
> attribute-value="GRUPPEN"
> />
> </query-customizer>
>
> </collection-descriptor>
>
> </class-descriptor>
>
>
> ------------------------------------------------------------------------
>
> <class-descriptor class="de.on_ergy.lakon.data.model.Log" table="log">
> <field-descriptor name="objId" column="obj_id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"></field-descriptor>
> <field-descriptor name="logBenutzerObjId" column="log_benutzer_obj_id" jdbc-type="INTEGER"></field-descriptor>
> <field-descriptor name="logKlasseObjId" column="log_klasse_obj_id" jdbc-type="INTEGER"></field-descriptor>
> <field-descriptor name="mnObjId" column="m_n_obj_id" jdbc-type="INTEGER" ></field-descriptor>
> <field-descriptor name="logTable" column="log_table" jdbc-type="VARCHAR" length="8"></field-descriptor>
> <field-descriptor name="logFunktion" column="log_funktion" jdbc-type="CHAR" length="1" ></field-descriptor>
> <field-descriptor name="logDataDefault" column="log_data_default" jdbc-type="VARCHAR" length="65535" ></field-descriptor>
> <field-descriptor name="logDataExport" column="log_data_export" jdbc-type="VARCHAR" length="65535" ></field-descriptor>
> <field-descriptor name="erstelltTimestamp" column="erstellt_timestamp" jdbc-type="TIMESTAMP" ></field-descriptor>
> <field-descriptor name="letzteAenderungTimestamp" column="letzte_aenderung_timestamp" jdbc-type="TIMESTAMP" ></field-descriptor>
> </class-descriptor>
>
>
> ------------------------------------------------------------------------
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org