留言板
Service Builder: mapping-key und db-name
Dima Morosjuk,修改在10 年前。
Service Builder: mapping-key und db-name
New Member 帖子: 4 加入日期: 13-8-26 最近的帖子
Hallo Zusammen,
ich möchte meine Frage anhand des folgenden Beispiels formulieren:
[indent]
<entity name="SalesHeader" remote-service="false" local-service="true">
<column name="SalesHeaderId" type="long" primary="true" id-type="identity"></column>
<column name="Name" type="String" />
<column name="Lieferort" type="String"></column>
<column name="Lieferdatum" type="Date"></column>
<column name="Items" type="Collection" entity="SalesLine" mapping-key="SalesHeaderId"></column>
</entity>
<entity name="SalesLine" local-service="true" remote-service="false">
<column name="SalesLineId" type="long" primary="true" id-type="identity"></column>
<column name="ItemName" type="String"></column>
<column name="ItemBeschreibung" type="String"></column>
<column name="SalesHeaderId" type="long" db-name="fk_SalesHeaderId"></column>
</entity>
[/indent]
Die fett markierte Zeile in der Entität SalesHeader beschreibt eine 1:n-Relation zu SalesLine über die Spalte "SalesHeaderId". Diese Spalte hat allerdings das db-name-Attribut gesetzt. Meine Frage ist: Was setzte ich im SalesHeader im mapping-key-Attribut? Den Namen der Spalte, also "SalesHeaderId", oder den Namen des db-name-Attributs, also "fk_SalesHeaderId"? Oder sind beide Werte valide?
Danke, falls einer hierfür eine Antwort findet.
Grüße,
Dima.
ich möchte meine Frage anhand des folgenden Beispiels formulieren:
[indent]
<entity name="SalesHeader" remote-service="false" local-service="true">
<column name="SalesHeaderId" type="long" primary="true" id-type="identity"></column>
<column name="Name" type="String" />
<column name="Lieferort" type="String"></column>
<column name="Lieferdatum" type="Date"></column>
<column name="Items" type="Collection" entity="SalesLine" mapping-key="SalesHeaderId"></column>
</entity>
<entity name="SalesLine" local-service="true" remote-service="false">
<column name="SalesLineId" type="long" primary="true" id-type="identity"></column>
<column name="ItemName" type="String"></column>
<column name="ItemBeschreibung" type="String"></column>
<column name="SalesHeaderId" type="long" db-name="fk_SalesHeaderId"></column>
</entity>
[/indent]
Die fett markierte Zeile in der Entität SalesHeader beschreibt eine 1:n-Relation zu SalesLine über die Spalte "SalesHeaderId". Diese Spalte hat allerdings das db-name-Attribut gesetzt. Meine Frage ist: Was setzte ich im SalesHeader im mapping-key-Attribut? Den Namen der Spalte, also "SalesHeaderId", oder den Namen des db-name-Attributs, also "fk_SalesHeaderId"? Oder sind beide Werte valide?
Danke, falls einer hierfür eine Antwort findet.
Grüße,
Dima.
Jan Geißler,修改在10 年前。
RE: Service Builder: mapping-key und db-name
Liferay Master 帖子: 735 加入日期: 11-7-5 最近的帖子
Hi Dima!
Aus der Service Builder DTD
Ich hoffe das hilft dir weiter.
Mehr kann ich dazu nicht sagen, da ich das noch nie ausprobiert habe. Aber wenn du da was hinkriegst, kannst du deine Befunde posten? ;)
Gruß
Jan
Aus der Service Builder DTD
If the entity and mapping-key attributes are specified and mapping-table is not,
then the Service Builder will assume you are specifying a one to many
relationship.
For example:
<column name="shoppingItemPrices" type="Collection" entity="ShoppingItemPrice" mapping-key="itemId" />
The above column specifies that there will be a getter called
pojo.getShoppingItemPrices() that will return a collection. It will map to a
column called itemId in the table that maps to the entity ShoppingItemPrice.
If the entity and mapping-table attributes are specified and mapping-key is not,
then the Service Builder will assume you are specifying a many to many
relationship.
For example:
<column name="roles" type="Collection" entity="Role" mapping-table="Groups_Roles" />
The above column specifies that there will be a getter called
pojo.getRoles() that will return a collection. It will use a mapping table
called Groups_Roles to give a many to many relationship between groups and
roles.
If you are creating a mapping table for an entity defined in another
service.xml, you need to specify the full package path.
For example:
<column name="organizations" type="Collection" entity="com.liferay.portal.Organization" mapping-table="Foo_Organizations" />
Ich hoffe das hilft dir weiter.
Mehr kann ich dazu nicht sagen, da ich das noch nie ausprobiert habe. Aber wenn du da was hinkriegst, kannst du deine Befunde posten? ;)
Gruß
Jan
Dima Morosjuk,修改在10 年前。
RE: Service Builder: mapping-key und db-name
New Member 帖子: 4 加入日期: 13-8-26 最近的帖子
Hallo Jan,
mapping-key und db-name scheinen überhaupt nicht miteinander zu funktionieren.
Bei folgender service.xml:
erhalte ich durch den Aufruf salesHeaderPersistence.getSalesLines(salesheaderId) folgende Fehlermeldung:
Scheinbar beachtet der Service-Builder das db-name-Attribut beim generieren der Tabellen, beim Abfragen der Relations-Einträge ignoriert er es allerdings. Dabei ist es übrigens egal, ob man im mapping-key-Attribut "salesheaderId" oder "othername" einträgt.
Müsste mal Jemand ein Issue für aufmachen.
mapping-key und db-name scheinen überhaupt nicht miteinander zu funktionieren.
Bei folgender service.xml:
<!--?xml version="1.0" encoding="UTF-8"?-->
<service-builder package-path="com.test">
<author>Donny</author>
<namespace>mappingtest</namespace>
<entity name="SalesHeader" remote-service="false" local-service="true">
<column name="salesheaderId" type="long" primary="true" id-type="identity"></column>
<column name="adresse" type="String"></column>
<column name="salesLines" entity="SalesLine" type="Collection" mapping-key="salesheaderId" />
<column name="groupId" type="long" />
<column name="companyId" type="long" />
<finder name="GroupId" return-type="Collection">
<finder-column name="groupId" />
</finder>
<finder name="CompanyId" return-type="Collection">
<finder-column name="companyId" />
</finder>
</entity>
<entity name="SalesLine" local-service="true" remote-service="false">
<column name="saleslineId" type="long" primary="true" id-type="identity"></column>
<column name="itemName" type="String"></column>
<column name="salesheaderId" type="long" db-name="othername" />
<column name="groupId" type="long" />
<column name="companyId" type="long" />
<finder name="GroupId" return-type="Collection">
<finder-column name="groupId" />
</finder>
<finder name="CompanyId" return-type="Collection">
<finder-column name="companyId" />
</finder>
</entity>
</service-builder>
erhalte ich durch den Aufruf salesHeaderPersistence.getSalesLines(salesheaderId) folgende Fehlermeldung:
02:19:03,704 ERROR [http-bio-8080-exec-34][JDBCExceptionReporter:76] Unknown column 'mappingtest_SalesLine.salesheaderId' in 'on clause'
Scheinbar beachtet der Service-Builder das db-name-Attribut beim generieren der Tabellen, beim Abfragen der Relations-Einträge ignoriert er es allerdings. Dabei ist es übrigens egal, ob man im mapping-key-Attribut "salesheaderId" oder "othername" einträgt.
Müsste mal Jemand ein Issue für aufmachen.
Armin Cyrus Dahncke,修改在10 年前。
RE: Service Builder: mapping-key und db-name
Junior Member 帖子: 81 加入日期: 08-8-12 最近的帖子
Hi Dima,
vielleicht hilft dir der LPS weiter
https://issues.liferay.com/browse/LPS-32250
vielleicht hilft dir der LPS weiter
https://issues.liferay.com/browse/LPS-32250