tabellen erstellen mit jboss

Status
Nicht offen für weitere Antworten.

boskop

Aktives Mitglied
Hallo,

ich mache gerade meine ersten Versuche mit jboss. Also bis jetzt gefällt mir das ganze sehr gut, es geht schnell und man hat etwas brauchbares. Jetzt möchte ich das ganze etwas optimieren und kriege etwas nicht ganz hin.

ich habe folgende Zeilen für eine Realtion im dd:

Code:
<relationships>
		<ejb-relation>
			<ejb-relation-name>ContactPerson-Customer</ejb-relation-name>
			<foreign-key-mapping/>
			<ejb-relationship-role>
				<ejb-relationship-role-name>ContactPerson to 
					Customer</ejb-relationship-role-name>
				<multiplicity>One</multiplicity>
				<relationship-role-source>
					<ejb-name>ContactPersonEJB</ejb-name>
				</relationship-role-source>
				<cmr-field>
					<cmr-field-name>customer</cmr-field-name>
					<column-name>customer</column-name>
				</cmr-field>
			</ejb-relationship-role>
			<ejb-relationship-role>
				<ejb-relationship-role-name>Customer to 
					ContactPersion</ejb-relationship-role-name>
				<multiplicity>One</multiplicity>
				<relationship-role-source>
					<ejb-name>CustomerEJB</ejb-name>
				</relationship-role-source>
				<cmr-field>
					<cmr-field-name>contactPerson</cmr-field-name>
					<column-name>contact_person</column-name>
				</cmr-field>
			</ejb-relationship-role>
		</ejb-relation>
	</relationships>

Die Tabellen gibt es noch nicht und ich lasse sie durch jboss machen.
Jetzt zu meinem ersten Problem. Wie muss ich machen, dass der foreign key in der Tabelle CUSTOMER contact_person heisst und nicht contactPerson. Dieses Tag wird irgendwie ignoriert, da wo ich es habe.
2. Wie kann ich die Typen der Felder angeben? Also ich möchte nicht, dass er für ein String-Feld ein VARCHAR(250) anlegt, sondern VARCHAR(30) z.B.

Hier noch ein Auszug aus jbosscmp-jdbc.xml
Code:
<entity>
         <ejb-name>CustomerEJB</ejb-name>
         <table-name>customers</table-name>
         <cmp-field>
            <field-name>name</field-name>
            <column-name>name</column-name>
		    <not-null/>
         </cmp-field>
		 <cmp-field>
            <field-name>street</field-name>
            <column-name>street</column-name>
         </cmp-field>
		 <cmp-field>
            <field-name>zip</field-name>
            <column-name>zip</column-name>
         </cmp-field>
		 <cmp-field>
            <field-name>city</field-name>
            <column-name>city</column-name>
         </cmp-field>
      </entity>

Hier klappt das auch mit den Spaltennamen. Aber wenn ich dieses Tag einfüge (<sql-type>VARCHAR(30)</sql-type>) deployt jboss nocht.

Kann mir da jemand weiterhelfen.

Besten Dank im voraus,

boskop
 
Sollte eigentlich laufen. ???:L
Versuche es in Kleinbuchstaben und gebe auch den JDBC Typen an.
Am besten so:
Code:
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>varchar(30)</sql-type>
 
ja... mein Fehler, <jdbc-type> und <sql-type> mussten einfach nach dem <not-null/> sein, jetzt geht's.

Danke.

Weisst du etwa noch die Lösung für mein Problem mit dem Namen des Foreign key?
 
Das mit dem Feldnamen für FK in der Datenbank gehört nicht in ejb-jar.xml sondern in jbosscmp-jdb.xml

In ejb-jar.xml folgendes
Code:
<ejb-relationship-role>

  <ejb-relationship-role-name>Customer to ContactPerson</ejb-relationship-role-name>
  <multiplicity>One</multiplicity>
  <relationship-role-source >
     <ejb-name>CustomerEJB</ejb-name>
  </relationship-role-source>
  <cmr-field >
     <cmr-field-name>contactPerson</cmr-field-name>
  </cmr-field>

</ejb-relationship-role>
In jbosscmp-jdb.xml das hier
Code:
<ejb-relationship-role>

  <ejb-relationship-role-name>Customer to ContactPerson</ejb-relationship-role-name>
  <key-fields>
    <key-field>
      <field-name>contactPerson</field-name>
      <column-name>contact_person</column-name>
    </key-field>
  </key-fields>

</ejb-relationship-role>
Lass dir das ganze Zeug von XDoclet generieren, spart dir viel Zeit. 😉
 
:autsch: Ich kaufe ein "c" :bae: (jbosscmp-jdbc.xml ist oben gemeint)
 
Hier das ganze etwas ausführlicher, um Missverständnisse zu vermeiden

ejb-jar.xml
Code:
<relationships>

  <ejb-relation>
    <ejb-relation-name>ContactPerson-Customer</ejb-relation-name>

    <ejb-relationship-role>
      <ejb-relationship-role-name>ContactPerson to Customer</ejb-relationship-role-name>
      <multiplicity>One</multiplicity>
      <relationship-role-source>
        <ejb-name>ContactPersonEJB</ejb-name>
      </relationship-role-source>
      <cmr-field>
        <cmr-field-name>customer</cmr-field-name>
      </cmr-field>
    </ejb-relationship-role>

    <ejb-relationship-role>
      <ejb-relationship-role-name>Customer to ContactPerson</ejb-relationship-role-name>
      <multiplicity>One</multiplicity>
      <relationship-role-source>
        <ejb-name>CustomerEJB</ejb-name>
      </relationship-role-source>
      <cmr-field>
        <cmr-field-name>contactPerson</cmr-field-name>
      </cmr-field>
    </ejb-relationship-role>

  </ejb-relation>

</relationships>
jbosscmp-jdbc.xml
Code:
<relationships>

  <ejb-relation>
    <ejb-relation-name>ContactPerson-Customer</ejb-relation-name>
    <foreign-key-mapping/>

    <ejb-relationship-role>
      <ejb-relationship-role-name>ContactPerson to Customer</ejb-relationship-role-name>
		<key-fields/>
    </ejb-relationship-role>

    <ejb-relationship-role>
      <ejb-relationship-role-name>Customer to ContactPerson</ejb-relationship-role-name>
      <key-fields>
        <key-field>
          <field-name>contactPerson</field-name>
          <column-name>contact_person</column-name>
        </key-field>
      </key-fields>
    </ejb-relationship-role>

  </ejb-relation>

</relationships>
 
vielen Dank für die Antworten,

wenn ich den Code vom letzten posting in mein jbosscmp-jdbc.xml integriere bekomme ich immer den Fehler:

CMP field not found : fieldName=customer

Also ich habe das mit den referenzierten Feldern so gemacht:

ejb-jar.xml habe ich diese nicht im entity-tag drin, also kein <cmp-field><field-name>customer</field-name></cmp-field>in der ContactPerson-Bean genauso im jbosscmp-jdbc.xml

Die Referenz-Felder kommen bei mir also nur in den <ejb-relation>-Tags vor. Ist das so mal primär richtig? Wenn ich die Relations im jbosscmp-jdbc.xml lösche, wird auch korrekt deployed, eifach ich kann nicht alle Spaltennamen in den Tabellen setzten... ja nicht so schlimm, aber schöner wär's.
 
Anonymous hat gesagt.:
vielen Dank für die Antworten,

wenn ich den Code vom letzten posting in mein jbosscmp-jdbc.xml integriere bekomme ich immer den Fehler:

CMP field not found : fieldName=customer

Also ich habe das mit den referenzierten Feldern so gemacht:

ejb-jar.xml habe ich diese nicht im entity-tag drin, also kein <cmp-field><field-name>customer</field-name></cmp-field>in der ContactPerson-Bean genauso im jbosscmp-jdbc.xml
Sollten aber drin sein. Du willst doch ContactPerson als FK in Customer haben und umgekehrt, oder?

Anonymous hat gesagt.:
Die Referenz-Felder kommen bei mir also nur in den <ejb-relation>-Tags vor. Ist das so mal primär richtig? Wenn ich die Relations im jbosscmp-jdbc.xml lösche, wird auch korrekt deployed, eifach ich kann nicht alle Spaltennamen in den Tabellen setzten... ja nicht so schlimm, aber schöner wär's.
Dies wäre Ok, wenn Du eine Zwischentabelle hättest (relation-table-mapping). One-to-One mit Zwischentabelle habe ich mit CMP noch nie
gemacht. In diesem Fall wäre es OK, die Felder nicht unter <cmp-field> zu nennen, dafür müsstest Du aber in jbosscmp-jdbc.xml die Zwischentabelle nennen. Also statt <foreign-key-mapping/> <relation-table-mapping> wie bei m-n relationship ???:L
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben