ejbCreate() bekommt richtige Werte, macht im query aber null draus

GartenUmgraben

Erfahrenes Mitglied
Moin..

Ich rufe in ner SessionBean die create Funktion auf und übergebe die richtigen Werte:

reservierungLocalHome.create(id, datum, name, strecke, preis, tarif);


keiner der werte ist null (ich lasse sie mir ausgeben)

Im Grunde führt er ja dann die ejbCreate in der EntityBean aus

public java.lang.Integer ejbCreate(
java.lang.Integer id,
java.util.Date datum,
java.lang.String name,
java.lang.String strecke,
java.lang.Double preis,
java.lang.String tarif) throws javax.ejb.CreateException {
// TODO Auto-generated method stub
return null;
}

Auch hier lasse ich mir die Werte nochmal ausgebn und sie stimmen.

Allerding macht dann der container daraus ein Insert Querry indem alle werte null sind und was demnach ne SQL Exception wirft.


Code:
2005-12-23 00:26:19,377 INFO  [STDOUT] EJB_CREATE_ID: 2  Datum: Wed Jan 12 00:23:00 CET 2005  Name: jojo  Strecke: Test  Tarif: 70  Preis: 2.45
2005-12-23 00:26:19,377 DEBUG [org.jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityCommand.Reservierung] Executing SQL: SELECT COUNT(*) FROM Reservierung WHERE id=?
2005-12-23 00:26:19,377 DEBUG [org.jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityCommand.Reservierung] Executing SQL: INSERT INTO Reservierung (id, datum, name, strecke, tarif, preis) VALUES (?, ?, ?, ?, ?, ?)
2005-12-23 00:26:19,377 ERROR [org.jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityCommand.Reservierung] Could not create entity
java.sql.SQLException: Duplicate key or integrity constraint violation message from server: "Column 'id' cannot be null"
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:2251)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1772)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1619)

Ich hab kein Plan warum er meine Werte nicht nimmt sondern nulls :/


(MysQL Log : INSERT INTO Reservierung (id, datum, name, strecke, tarif, preis) VALUES (null, null, null, null, null, null))
 
Re: ejbCreate bekommt richtige werte macht im querry ber null draus

Hallo!

Wie schaut denn der jbosscmp-jdbc.xml deployment Descriptor aus? Sind dort die cmp-field Mappings enthalten? (das entsprechende Entity Element aus der ejb-jar.xml wäre auch ganz interessant)

Gruss Tom

Fehlen da nicht die setter Aufrufe in ejbCreate?
 
Re: ejbCreate bekommt richtige werte macht im querry ber null draus

Dort steht für die Reservierung follgendes drin


jbosscmp-jdbc.xml
Code:
.<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd">

<jbosscmp-jdbc>
   <defaults>
     <datasource>java:/MySqlDS</datasource>
     <datasource-mapping>mySQL</datasource-mapping>
   </defaults>

   <enterprise-beans>

     <!--
       To add beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called jbosscmp-jdbc-beans.xml
       that contains the <entity></entity> markup for those beans.
     -->

      <entity>
         <ejb-name>Strecke</ejb-name>

         <cmp-field>
            <field-name>start</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>ziel</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>wert</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>status</field-name>

        </cmp-field>

<!-- jboss 3.2 features -->
<!-- optimistic locking does not express the exclusions needed -->
      </entity>

      <entity>
         <ejb-name>Station</ejb-name>

         <cmp-field>
            <field-name>id</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>name</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>mapX</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>mapY</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>status</field-name>

        </cmp-field>

<!-- jboss 3.2 features -->
<!-- optimistic locking does not express the exclusions needed -->
      </entity>

      <entity>
         <ejb-name>Reservierung</ejb-name>

         <cmp-field>
            <field-name>id</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>datum</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>name</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>strecke</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>tarif</field-name>

        </cmp-field>
         <cmp-field>
            <field-name>preis</field-name>

        </cmp-field>

<!-- jboss 3.2 features -->
<!-- optimistic locking does not express the exclusions needed -->
      </entity>

   </enterprise-beans>

</jbosscmp-jdbc>


und

ejb-jar.xml

Code:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar >

   <description><![CDATA[No Description.]]></description>
   <display-name>Generated by XDoclet</display-name>

   <enterprise-beans>

      <!-- Session Beans -->
      <session >
         <description><![CDATA[Description for NetzService]]></description>
         <display-name>Name for NetzService</display-name>

         <ejb-name>NetzService</ejb-name>

         <home>bahn.netz.interfaces.NetzServiceHome</home>
         <remote>bahn.netz.interfaces.NetzService</remote>
         <local-home>bahn.netz.interfaces.NetzServiceLocalHome</local-home>
         <local>bahn.netz.interfaces.NetzServiceLocal</local>
         <ejb-class>bahn.netz.ejb.NetzServiceEJB</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>

         <ejb-local-ref >
            <ejb-ref-name>ejb/StationLocal</ejb-ref-name>
            <ejb-ref-type>Entity</ejb-ref-type>
            <local-home>bahn.netz.interfaces.StationLocalHome</local-home>
            <local>bahn.netz.interfaces.StationLocal</local>
            <ejb-link>Station</ejb-link>
         </ejb-local-ref>
         <ejb-local-ref >
            <ejb-ref-name>ejb/StreckeLocal</ejb-ref-name>
            <ejb-ref-type>Entity</ejb-ref-type>
            <local-home>bahn.netz.interfaces.StreckeLocalHome</local-home>
            <local>bahn.netz.interfaces.StreckeLocal</local>
            <ejb-link>Strecke</ejb-link>
         </ejb-local-ref>

      </session>

      <session >
         <description><![CDATA[Description for ReservierungService]]></description>
         <display-name>Name for ReservierungService</display-name>

         <ejb-name>ReservierungService</ejb-name>

         <home>bahn.reservierung.interfaces.ReservierungServiceHome</home>
         <remote>bahn.reservierung.interfaces.ReservierungService</remote>
         <local-home>bahn.reservierung.interfaces.ReservierungServiceLocalHome</local-home>
         <local>bahn.reservierung.interfaces.ReservierungServiceLocal</local>
         <ejb-class>bahn.reservierung.ejb.ReservierungServiceEJB</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>

         <ejb-local-ref >
            <ejb-ref-name>ejb/ReservierungLocal</ejb-ref-name>
            <ejb-ref-type>Entity</ejb-ref-type>
            <local-home>bahn.reservierung.interfaces.ReservierungLocalHome</local-home>
            <local>bahn.reservierung.interfaces.ReservierungLocal</local>
            <ejb-link>Reservierung</ejb-link>
         </ejb-local-ref>

      </session>

     <!--
       To add session beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called session-beans.xml that contains
       the <session></session> markup for those beans.
     -->

      <!-- Entity Beans -->
      <entity >
         <description><![CDATA[Description for Strecke]]></description>
         <display-name>Name for Strecke</display-name>

         <ejb-name>Strecke</ejb-name>

         <local-home>bahn.netz.interfaces.StreckeLocalHome</local-home>
         <local>bahn.netz.interfaces.StreckeLocal</local>

         <ejb-class>bahn.netz.ejb.StreckeEJB</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>bahn.netz.interfaces.StreckePK</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>Strecke</abstract-schema-name>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field start]]></description>
            <field-name>start</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field ziel]]></description>
            <field-name>ziel</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field wert]]></description>
            <field-name>wert</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field status]]></description>
            <field-name>status</field-name>
         </cmp-field>

         <query>
            <description><![CDATA[Returns all Strecke]]></description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params>
               </method-params>
            </query-method>
            <ejb-ql><![CDATA[select Object(e) from Strecke e]]></ejb-ql>
         </query>
	  <!-- Write a file named ejb-finders-StreckeEJB.xml if you want to define extra finders. -->

      </entity>

      <entity >
         <description><![CDATA[Description for Station]]></description>
         <display-name>Name for Station</display-name>

         <ejb-name>Station</ejb-name>

         <local-home>bahn.netz.interfaces.StationLocalHome</local-home>
         <local>bahn.netz.interfaces.StationLocal</local>

         <ejb-class>bahn.netz.ejb.StationEJB</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Integer</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>Station</abstract-schema-name>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field id]]></description>
            <field-name>id</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field name]]></description>
            <field-name>name</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field mapX]]></description>
            <field-name>mapX</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field mapY]]></description>
            <field-name>mapY</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field status]]></description>
            <field-name>status</field-name>
         </cmp-field>
         <primkey-field>id</primkey-field>

         <query>
            <description><![CDATA[Returns all Station]]></description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params>
               </method-params>
            </query-method>
            <ejb-ql><![CDATA[select Object(e) from Station e ORDER BY e.name]]></ejb-ql>
         </query>
	  <!-- Write a file named ejb-finders-StationEJB.xml if you want to define extra finders. -->

      </entity>

      <entity >
         <description><![CDATA[Description for Reservierung]]></description>
         <display-name>Name for Reservierung</display-name>

         <ejb-name>Reservierung</ejb-name>

         <local-home>bahn.reservierung.interfaces.ReservierungLocalHome</local-home>
         <local>bahn.reservierung.interfaces.ReservierungLocal</local>

         <ejb-class>bahn.reservierung.ejb.ReservierungEJB</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.Integer</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-version>2.x</cmp-version>
         <abstract-schema-name>Reservierung</abstract-schema-name>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field id]]></description>
            <field-name>id</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field Datum]]></description>
            <field-name>datum</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field name]]></description>
            <field-name>name</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field strecke]]></description>
            <field-name>strecke</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field tarif]]></description>
            <field-name>tarif</field-name>
         </cmp-field>
         <cmp-field >
            <description><![CDATA[Getter for CMP Field preis]]></description>
            <field-name>preis</field-name>
         </cmp-field>
         <primkey-field>id</primkey-field>

         <query>
            <description><![CDATA[Returns all Reservations]]></description>
            <query-method>
               <method-name>findAll</method-name>
               <method-params>
               </method-params>
            </query-method>
            <ejb-ql><![CDATA[select Object(e) from Reservierung e]]></ejb-ql>
         </query>
    
	  <!-- Write a file named ejb-finders-ReservierungEJB.xml if you want to define extra finders. -->

      </entity>

     <!--
       To add entity beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called entity-beans.xml that contains
       the <entity></entity> markup for those beans.
     -->

      <!-- Message Driven Beans -->
     <!--
       To add message driven beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called message-driven-beans.xml that contains
       the <message-driven></message-driven> markup for those beans.
     -->

   </enterprise-beans>

   <!-- Relationships -->

   <!-- Assembly Descriptor -->
     <!--
       To specify your own assembly descriptor info here, add a file to your
       XDoclet merge directory called assembly-descriptor.xml that contains
       the <assembly-descriptor></assembly-descriptor> markup.
     -->

   <assembly-descriptor >
     <!--
       To specify additional security-role elements, add a file in the merge
       directory called ejb-security-roles.xml that contains them.
     -->

   <!-- method permissions -->
     <!--
       To specify additional method-permission elements, add a file in the merge
       directory called ejb-method-permissions.ent that contains them.
     -->

   <!-- transactions -->
     <!--
       To specify additional container-transaction elements, add a file in the merge
       directory called ejb-container-transactions.ent that contains them.
     -->

   <!-- finder transactions -->

   <!-- message destinations -->
     <!--
       To specify additional message-destination elements, add a file in the merge
       directory called ejb-message-destinations.ent that contains them.
     -->

   <!-- exclude list -->
     <!--
       To specify an exclude-list element, add a file in the merge directory
       called ejb-exclude-list.xml that contains it.
     -->
   </assembly-descriptor>

</ejb-jar>
 
Re: ejbCreate bekommt richtige werte macht im querry ber null draus

Ich hatte solch ein Problem auch mal.
Schau mal nach, ob die Strucktur deiner Tabelle stimmt. Bei mir, war da Standart "0" eingetragen, wusste auch net warum.

Hab dann den Typ von "int", was ja auch falsch war, in "text" umgewandelt und seit dem geht es jetzt ^^

Daddi
 
Re: ejbCreate bekommt richtige werte macht im querry ber null draus

Danke für die Antwort...hab den Fehler doch noch selbst gefunden.

Es lag daran, das in der ejbCreate Methode ja nichts passiert. Sprich es fehlen die Anweisung zum setzen der Werte. (setStrecke(strecke); setId(id); usw)

Jetzt gehts dann jedanfalls


Auf bald....
 

Neue Beiträge

Zurück