# tabellen erstellen mit jboss



## boskop (18. Aug 2005)

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:


```
<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

```
<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


----------



## Guest (18. Aug 2005)

Sollte eigentlich laufen. ???:L
Versuche es in Kleinbuchstaben und gebe auch den JDBC Typen an.
Am besten so:
	
	
	
	





```
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>varchar(30)</sql-type>
```


----------



## boskop (18. Aug 2005)

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?


----------



## Guest (18. Aug 2005)

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
	
	
	
	





```
<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
	
	
	
	





```
<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.


----------



## Guest (18. Aug 2005)

:autsch: Ich kaufe ein "c" :bae: (jbosscmp-jdb*c*.xml ist oben gemeint)


----------



## Guest (18. Aug 2005)

Hier das ganze etwas ausführlicher, um Missverständnisse zu vermeiden

ejb-jar.xml
	
	
	
	





```
<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
	
	
	
	





```
<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>
```


----------



## Guest (19. Aug 2005)

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.


----------



## Guest (19. Aug 2005)

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:
> 
> ...


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


----------

