facebook

Error in Generate POJO

  1. MyEclipse Archived
  2.  > 
  3. Database Tools (DB Explorer, Hibernate, etc.)
Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #250048 Reply

    macinsmith
    Member

    GeneratePOJO generates an incorrect constructor when you use a UserType. Following the Oreilly book Hibernate: A Developer’s Notebook by Elliott I am generating a user type. Let’s say for this example I want to persist Color as ColorType. Let’s say that the object I’m persisting is Chair and my Chair.hbm.xml file has the following in it:

        <property name="chairColor" type="doowop.ColorType">
          <meta attribute="field-description">Color of the chair</meta>
          <meta attribute="use-in-tostring">true</meta>
        </property>
    

    My typesafe enumeration class for Color has the following:

    public class Color implements Serializable {
    ...
        public static final Color RED = new Color("red", "Deep Red");
        public static final Color BLUE = new Color("blue", "Navy Blue");
    
    ...
    }
    

    GeneratePOJO generates a constructor for Chair with the following signature:

    public Chair (..., ColorType colorType, ...) { ... }
    

    when it should generate:

    public Chair (..., Color color, ...) { ... }
    

    I want to create an instance of chair so I do something like:

    Chair mychair = new Chair( ..., Color.RED, ...)
    

    which fails because Chair is expecting a ColorType, not a Color object.

    #250056 Reply

    Riyad Kalla
    Member

    I’m not terribly clear on this, but you have defined a type “Color” that you want to set as a property value on your Chair type (chair.setColor(Color.RED))… then where does the “doowop.ColorType” type come into play in your HBM above? Why isn’t the type doowop.Color?

    Maybe there are more details here that would clarify that for me that I’m missing.

    #250061 Reply

    Haris Peco
    Member

    macinsmith ,

    It is probably bug – Is field color in POJO correct generated ?

    Thanks

    #250068 Reply

    Brian Fernandes
    Moderator

    I have the same concerns as stated above, could you please paste a greater chunk of your mapping file and perhaps relevant java files so that we have a better idea of what’s going wrong?
    Pasting the DDL for the schema would help as well.

    Best,
    Brian.

    #250073 Reply

    macinsmith
    Member

    I posted all three mapping files in another post entitled “Another error in GeneratePOJO”. The example of Color and ColorType were an abstraction of a real problem that was taken from the book I cited and the example code is also available from Oreilly’s web site. In the three files that you will find in “Another error in GeneratePOJO”, you will find a file Track.hbm.xml which has a property that refers to SourceMediaType, but the generated code should refer to SourceMedia. You can download all the code from <http://examples.oreilly.com/hibernate/SourceExamples.zip&gt; I suggest that you pick the code in Chapt 9 since it has the UserType in it. With that code, you should be able to use the 3 mapping files to generate the 4 POJO files.

    #250074 Reply

    macinsmith
    Member

    Here are the three hmb.xml mapping files, the hibernate.cfg.xml and the SourceMedia and SourceMediaType java files. I’m also sending you the correct Track.java file. You may notice that the parameters get generated in the wrong order if you use their files I had to re-order them to make them work with your plugin.

    Album.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    
    <hibernate-mapping>
      <class name="com.oreilly.hh.Album" table="ALBUM">
        <meta attribute="class-description">
          Represents an album in the music database, an organized list of tracks.
          @author Jim Elliott (with help from Hibernate)
        </meta>
    
        <id name="id" type="int" column="ALBUM_ID">
          <meta attribute="scope-set">protected</meta>
          <generator class="native"/>
        </id>
    
        <property name="title" type="string">
          <meta attribute="use-in-tostring">true</meta>
          <column name="TITLE" not-null="true" index="ALBUM_TITLE"/>
        </property>
    
        <property name="numDiscs" type="integer" not-null="true"/>
    
        <set name="artists" table="ALBUM_ARTISTS">
          <key column="ALBUM_ID"/>
          <many-to-many class="com.oreilly.hh.Artist" column="ARTIST_ID"/>
        </set>
    
        <set name="comments" table="ALBUM_COMMENTS">
          <key column="ALBUM_ID"/>
          <element column="COMMENT" type="string"/>
        </set>
    
        <list name="tracks" table="ALBUM_TRACKS" cascade="all">
          <meta attribute="use-in-tostring">true</meta>
          <key column="ALBUM_ID"/>
          <index column="POS"/>
          <composite-element class="com.oreilly.hh.AlbumTrack">
            <many-to-one name="track" class="com.oreilly.hh.Track" cascade="all">
              <meta attribute="use-in-tostring">true</meta>
              <column name="TRACK_ID"/>
            </many-to-one>
            <property name="disc" type="integer" not-null="true"/>
            <property name="positionOnDisc" type="integer" not-null="true"/>
          </composite-element>
        </list>
    
        <property name="added" type="date">
          <meta attribute="field-description">When the album was added</meta>
        </property>
    
      </class>
    </hibernate-mapping>
    

    Artist.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
    
      <class name="com.oreilly.hh.Artist" table="ARTIST">
        <meta attribute="class-description">
          Represents an artist who is associated with a track or album.
          @author Jim Elliott (with help from Hibernate)
        </meta>
    
        <id name="id" type="int" column="ARTIST_ID">
          <meta attribute="scope-set">protected</meta>
          <generator class="native"/>
        </id>
    
        <property name="name" type="string">
          <meta attribute="use-in-tostring">true</meta>
          <column name="NAME" not-null="true" unique="true" index="ARTIST_NAME"/>
        </property>
    
        <set name="tracks" table="TRACK_ARTISTS" inverse="true">
          <meta attribute="field-description">Tracks by this artist</meta>
          <key column="ARTIST_ID"/>
          <many-to-many class="com.oreilly.hh.Track" column="TRACK_ID"/>
        </set>
    
        <many-to-one name="actualArtist" class="com.oreilly.hh.Artist">
          <meta attribute="use-in-tostring">true</meta>
        </many-to-one>
    
      </class>
    
      <query name="com.oreilly.hh.artistByName">
        <![CDATA[
            from com.oreilly.hh.Artist as artist
            where upper(artist.name) = upper(:name)
          ]]>
      </query>
    
    </hibernate-mapping>
    

    Track.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    
    <hibernate-mapping>
    
      <class name="com.oreilly.hh.Track" table="TRACK">
        <meta attribute="class-description">
          Represents a single playable track in the music database.
          @author Jim Elliott (with help from Hibernate)
        </meta>
    
        <id name="id" type="int" column="TRACK_ID">
          <meta attribute="scope-set">protected</meta>
          <generator class="native"/>
        </id>
    
        <property name="title" type="string">
          <meta attribute="use-in-tostring">true</meta>
          <column name="TITLE" not-null="true" index="TRACK_TITLE"/>
        </property>
    
        <property name="filePath" type="string" not-null="true"/>
    
        <property name="playTime" type="time">
          <meta attribute="field-description">Playing time</meta>
        </property>
    
        <set name="artists" table="TRACK_ARTISTS">
          <key column="TRACK_ID"/>
          <many-to-many class="com.oreilly.hh.Artist" column="ARTIST_ID"/>
        </set>
    
        <set name="comments" table="TRACK_COMMENTS">
          <key column="TRACK_ID"/>
          <element column="COMMENT" type="string"/>
        </set>
    
        <property name="added" type="date">
          <meta attribute="field-description">When the track was added</meta>
        </property>
    
        <property name="volume" type="com.oreilly.hh.StereoVolumeType">
          <meta attribute="field-description">How loud to play the track</meta>
          <meta attribute="use-in-tostring">true</meta>
          <column name="VOL_LEFT"/>
          <column name="VOL_RIGHT"/>
        </property>
    
        <property name="sourceMedia" type="com.oreilly.hh.SourceMediaType">
          <meta attribute="field-description">Media on which track was obtained</meta>
          <meta attribute="use-in-tostring">true</meta>
        </property>
    
      </class>
    
      <query name="com.oreilly.hh.tracksNoLongerThan">
        <![CDATA[
            from com.oreilly.hh.Track as track
            where track.playTime <= :length
          ]]>
      </query>
    
    </hibernate-mapping>
    

    hibernate.cfg.xml

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>
    
        <session-factory>
            <property name="connection.username">hiberuser</property>
            <property name="connection.url">jdbc:mysql:///helloworld</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            <property name="myeclipse.connection.profile">MySQL</property>
            <property name="connection.password">secret</property>
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        
        </session-factory>
    
    </hibernate-configuration>

    SourceMedia.java

    package com.oreilly.hh;
    
    import java.util.*;
    import java.io.Serializable;
    
    import org.hibernate.HibernateException;
    
    /**
     * This is a typesafe enumeration that identifies the media on which an
     * item in our music database was obtained.
     **/
    public class SourceMedia implements Serializable {
    
        /**
         * Stores the external name of this instance, by which it can be retrieved.
         */
        private final String name;
    
        /**
         * Stores the human-readable description of this instance, by which it is
         * identified in the user interface.
         */
        private final transient String description;
    
        /**
         * Return the external name associated with this instance. <p>
         * 
         * @return the name by which this instance is identified in code.
         **/
        public String getName() {
            return name;
        }
    
        /**
         * Return the description associated with this instance. <p>
         * 
         * @return the human-readable description by which this instance is
         *         identified in the user interface.
         **/
        public String getDescription() {
            return description;
        }
    
        /**
         * Keeps track of all instances by name, for efficient lookup.
         */
        private static final Map instancesByName = new HashMap();
    
        /**
         * Constructor is private to prevent instantiation except during class
         * loading.
         * 
         * @param name the external name of the message type.
         * @param description the human readable description of the message type,
         *        by which it is presented in the user interface.
         */
        private SourceMedia(String name, String description) {
            this.name = name;
            this.description = description;
    
            // Record this instance in the collection that tracks the enumeration
            instancesByName.put(name, this);
        }
    
        /**
         * The instance that represents music obtained from cassette tape.
         */
        public static final SourceMedia CASSETTE =
            new SourceMedia("cassette", "Audio Cassette Tape");
    
        /**
         * The instance that represents music obtained from vinyl.
         */
        public static final SourceMedia VINYL =
            new SourceMedia("vinyl", "Vinyl Record");
    
        /**
         * The instance that represents music obtained from VHS tapes.
         */
        public static final SourceMedia VHS =
            new SourceMedia("vhs", "VHS Videocassette Tape");
    
        /**
         * The instance that represents music obtained from a compact disc.
         */
        public static final SourceMedia CD =
            new SourceMedia("cd", "Compact Disc");
    
        /**
         * The instance that represents music obtained from a broadcast.
         */
        public static final SourceMedia BROADCAST =
            new SourceMedia("broadcast", "Analog Broadcast");
    
        /**
         * The instance that represents music obtained as an Internet download.
         */
        public static final SourceMedia DOWNLOAD =
            new SourceMedia("download", "Internet Download");
    
        /**
         * The instance that represents music from a digital audio stream.
         */
        public static final SourceMedia STREAM =
            new SourceMedia("stream", "Digital Audio Stream");
    
        /**
         * Obtain the collection of all legal enumeration values.
         *
         * @return all instances of this typesafe enumeration.
         */
        public static Collection getAllValues() {
            return Collections.unmodifiableCollection(instancesByName.values());
        }
    
        /**
         * Look up an instance by name.
         *
         * @param name the external name of an instance.
         * @return the corresponding instance.
         * @throws NoSuchElementException if there is no such instance.
         */
        public static SourceMedia getInstanceByName(String name) {
            SourceMedia result = (SourceMedia)instancesByName.get(name);
            if (result == null) {
                throw new NoSuchElementException(name);
            }
            return result;
        }
    
        /**
         * Return a string representation of this object.
         */
            public String toString() {
            return description;
        }
    
        /**
         * Insure that deserialization preserves the signleton property.
         */
        private Object readResolve() {
            return getInstanceByName(name);
        }
    }
    

    SourceMediaType.java

    package com.oreilly.hh;
    
    import java.io.Serializable;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Types;
    
    import org.hibernate.usertype.*;
    import org.hibernate.Hibernate;
    import org.hibernate.HibernateException;
    import org.hibernate.type.Type;
    
    /**
     * Manages persistence for the {@link SourceMedia} typesafe enumeration.
     */
    public class SourceMediaType implements UserType {
        
        public SourceMediaType(SourceMedia _sourceMedia) {
            
        }
    
        /**
         * Indicates whether objects managed by this type are mutable.
         *
         * @return <code>false</code>, since enumeration instances are immutable
         *         singletons.
         */
        public boolean isMutable() {
            return false;
        }
    
        /**
         * Return a deep copy of the persistent state, stopping at
         * entities and collections.
         *
         * @param value the object whose state is to be copied.
         * @return the same object, since enumeration instances are singletons.
         * @throws ClassCastException for non {@link SourceMedia} values.
         */
        public Object deepCopy(Object value) {
            return (SourceMedia)value;
        }
    
        /**
         * Compare two instances of the class mapped by this type for persistence
         * "equality".
         *
         * @param x first object to be compared.
         * @param y second object to be compared.
         * @return <code>true</code> iff both represent the same SourceMedia type.
         * @throws ClassCastException if x or y isn't a {@link SourceMedia}.
         */
        public boolean equals(Object x, Object y) {
            // We can compare instances, since SourceMedia are immutable singletons
            return (x == y);
        }
    
        /**
         * Determine the class that is returned by {@link #nullSafeGet}.
         *
         * @return {@link SourceMedia}, the actual type returned
         * by {@link #nullSafeGet}.
         */
        public Class returnedClass() {
            return SourceMedia.class;
        }
    
        /**
         * Determine the SQL type(s) of the column(s) used by this type mapping.
         *
         * @return a single VARCHAR column.
         */
        public int[] sqlTypes() {
            // Allocate a new array each time to protect against callers changing
            // its contents.
            int[] typeList = {
                Types.VARCHAR
            };
            return typeList;
        }
    
        /**
         * Retrieve an instance of the mapped class from a JDBC {@link ResultSet}.
         *
         * @param rs the results from which the instance should be retrieved.
         * @param names the columns from which the instance should be retrieved.
         * @param owner the entity containing the value being retrieved.
         * @return the retrieved {@link SourceMedia} value, or <code>null</code>.
         * @throws HibernateException if there is a problem performing the mapping.
         * @throws SQLException if there is a problem accessing the database.
         */
        public Object nullSafeGet(ResultSet rs, String[] names, Object owner)
            throws HibernateException, SQLException
        {
            // Start by looking up the value name
            String name = (String) Hibernate.STRING.nullSafeGet(rs, names[0]);
            if (name == null) {
                return null;
            }
            // Then find the corresponding enumeration value
            try {
                return SourceMedia.getInstanceByName(name);
            }
            catch (java.util.NoSuchElementException e) {
                throw new HibernateException("Bad SourceMedia value: " + name, e);
            }
        }
    
        /**
         * Write an instance of the mapped class to a {@link PreparedStatement}, 
         * handling null values.
         *
         * @param st a JDBC prepared statement.
         * @param value the SourceMedia value to write.
         * @param index the parameter index within the prepared statement at which
         *        this value is to be written.
         * @throws HibernateException if there is a problem performing the mapping.
         * @throws SQLException if there is a problem accessing the database.
         */
        public void nullSafeSet(PreparedStatement st, Object value, int index)
            throws HibernateException, SQLException
        {
            String name = null;
            if (value != null)
                name = ((SourceMedia)value).getName();
            Hibernate.STRING.nullSafeSet(st, name, index);
        }
    
        public int hashCode(Object _x) throws HibernateException {
            return _x.hashCode();
        }
    
        public Serializable disassemble(Object _value) throws HibernateException {
            return (Serializable)deepCopy(_value);
        }
    
        public Object assemble(Serializable _cached, Object _owner) throws HibernateException {
            // TODO Auto-generated method stub
            return deepCopy(_cached);
        }
    
        public Object replace(Object _original, Object _target, Object _owner) throws HibernateException {
            return _original;
        }
    }
    

    Correct version of Track.java

    package com.oreilly.hh;
    
    import java.util.Date;
    import java.util.HashSet;
    import java.util.Set;
    
    
    /**
     *       Represents a single playable track in the music database.
     *       @author Jim Elliott (with help from Hibernate)
     *     
     */
    
    public class Track  implements java.io.Serializable {
    
    
        // Fields    
    
         private int id;
         private String title;
         private String filePath;
         /**
          * Playing time
         */
         private Date playTime;
         /**
          * When the track was created
         */
         private Date added;
         /**
          * How loud to play the track
         */
         private StereoVolume volume;
         /**
          * Media on which track was obtained
         */
         private SourceMedia sourceMedia;
         private Set artists = new HashSet(0);
         private Set comments = new HashSet(0);
    
    
        // Constructors
    
        /** default constructor */
        public Track() {
        }
    
        /** minimal constructor */
        public Track(String title, String filePath) {
            this.title = title;
            this.filePath = filePath;
        }
        
        /** full constructor */
        public Track(String title, String filePath, Date playTime, Date added, StereoVolume volume, SourceMedia sourceMedia, Set artists, Set comments) {
            this.title = title;
            this.filePath = filePath;
            this.playTime = playTime;
            this.added = added;
            this.volume = volume;
            this.sourceMedia = sourceMedia;
            this.artists = artists;
            this.comments = comments;
        }
    
       
        // Property accessors
    
        public int getId() {
            return this.id;
        }
        
        protected void setId(int id) {
            this.id = id;
        }
    
        public String getTitle() {
            return this.title;
        }
        
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getFilePath() {
            return this.filePath;
        }
        
        public void setFilePath(String filePath) {
            this.filePath = filePath;
        }
        /**       
         *      * Playing time
         */
    
        public Date getPlayTime() {
            return this.playTime;
        }
        
        public void setPlayTime(Date playTime) {
            this.playTime = playTime;
        }
        /**       
         *      * When the track was created
         */
    
        public Date getAdded() {
            return this.added;
        }
        
        public void setAdded(Date added) {
            this.added = added;
        }
        /**       
         *      * How loud to play the track
         */
    
        public StereoVolume getVolume() {
            return this.volume;
        }
        
        public void setVolume(StereoVolume volume) {
            this.volume = volume;
        }
        /**       
         *      * Media on which track was obtained
         */
    
        public SourceMedia getSourceMedia() {
            return this.sourceMedia;
        }
        
        public void setSourceMedia(SourceMedia sourceMedia) {
            this.sourceMedia = sourceMedia;
        }
    
        public Set getArtists() {
            return this.artists;
        }
        
        public void setArtists(Set artists) {
            this.artists = artists;
        }
    
        public Set getComments() {
            return this.comments;
        }
        
        public void setComments(Set comments) {
            this.comments = comments;
        }
       
    
        /**
         * toString
         * @return String
         */
         public String toString() {
          StringBuffer buffer = new StringBuffer();
    
          buffer.append(getClass().getName()).append("@").append(Integer.toHexString(hashCode())).append(" [");
          buffer.append("title").append("='").append(getTitle()).append("' ");            
          buffer.append("volume").append("='").append(getVolume()).append("' ");            
          buffer.append("sourceMedia").append("='").append(getSourceMedia()).append("' ");            
          buffer.append("]");
          
          return buffer.toString();
         }
    }

    Note the full contructor uses SourceMedia rather than SourceMediaType. This is the problem since GeneratePOJO uses SourceMediaType.

    If you try to use the ant build files, you will have to use Hibernate 2.0 or change the files since they use the version 2 packages net.sf.hibernate.

    This should generate 4 files Album.java, AlbumTrack.java, Artist.java and Track.java but it fails to generate AlbumTrack.java. This code is taken from Oreilly’s book Hibernate:A Developer’s Notebook by Elliott.

    #250075 Reply

    macinsmith
    Member

    Configuration Summary:

    
     *** Date: Sat Apr 08 10:54:00 PDT 2006
    
    *** System properties:
    OS=mac os x
    OS version=10.4.6
    Java version=1.4.2_09
    
    *** MyEclipse details:
    MyEclipse Enterprise Workbench
    
    Version: 4.1.1 GA
    Build id: 20060228-4.1.1-GA
    
    *** Eclipse details:
    Eclipse SDK
    
    Version: 3.1.2
    Build id: M20060118-1600
    
    Eclipse Platform
    
    Version: 3.1.2
    Build id: M20060118-1600
    
    Eclipse RCP
    
    Version: 3.1.2
    Build id: M20060118-1600
    
    Eclipse Java Development Tools
    
    Version: 3.1.2
    Build id: M20060118-1600
    
    Eclipse Plug-in Development Environment
    
    Version: 3.1.2
    Build id: M20060118-1600
    
    Eclipse Project SDK
    
    Version: 3.1.2
    Build id: M20060118-1600
    
    Eclipse startup command=-os
    macosx
    -ws
    carbon
    -arch
    ppc
    -launcher
    /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse
    -name
    Eclipse
    -showsplash
    600
    -exitdata
    c0000
    -keyring
    /Users/srsmitty/.eclipse_keyring
    -consoleLog
    -showlocation
    -vm
    /usr/bin/java
    
    
    
    #250087 Reply

    Haris Peco
    Member

    macinsmith,

    We can reproduce your case and this is bug.I will file this and it will be resolved in future releases

    Please , answer on next :

    1) Track.java have incorrect type for volume and sourceMedia fields (and setter/getter, constructor for this fields) only
    2) AlbumTrack.java isn’t generated at all (composite element)

    3) What mean ‘You may notice that the parameters get generated in the wrong order if you use their files I had to re-order them to make them work with your plugin. ‘ ?

    Thanks you for your reports

    PS
    This are hibernate 2.0 mapping files and we suggest that you use hibernate 3

    #250088 Reply

    Haris Peco
    Member

    3) What mean ‘You may notice that the parameters get generated in the wrong order if you use their files I had to re-order them to make them work with your plugin. ‘ ?

    if you think about order parameters in cosntructors , MyEclipse set order from mapping files.
    I don’t know what idea have book’s writer about this order, but it is impossible set all combinations

    if this is problem for you, just reorder elements in mappings file

    Thanks

    #250092 Reply

    macinsmith
    Member

    I’m not sure what you want from me. Let me take a stab at it.

    1) The Track.java that your plugin generates is wrong for several parameters, but I think they are all related to the UserType, so I only reported one.

    2) AlbumTrack.java isn’t generated using your plugin, but it is using the Ant script and Hibernate 2.0 as a result of the composite element. It is desirable to have it specified in the mapping file for Track since it is implied by the composite element. So the Track.hbm.xml causes 2 .java files to be generated.

    3) I believe that your plugin does the right ordering. I’m not sure why the author chose to put the properties in the order he did, but I was just trying to warn you that there was a problem in his files, not yours.

    4) PS. Yes, I know, but had forgotten, that these were Hibernate 2 files and will convert them. I found that when I went through the book, it was easier to step back to Hibernate 2 and follow the book. My plan is to do this in Eclipse using MyEclipse and Hibernate 3. I also want to generate the schema in Eclipse too, but it appears that MyEclipse doesn’t provide for that, so I may have to end up using Ant (from eclipse) to generate the schema.

    If you don’t have the book, I suggest that it is a great resource. It has it’s problems, but it does a good job of getting you to think in terms of the power of Hibernate and let it do the work for you.

    Thanks for being so quick to respond. How will I know when this is fixed? Do you have an estimate of when I should expect it? I will be glad to beta test this part for you.

    Stephen Smith (macinsmith)

    #250103 Reply

    Haris Peco
    Member

    Stephen,

    I file 2 reports about problems with composite elemnts and UserType.
    Thank you for your reports

    Best regards

Viewing 11 posts - 1 through 11 (of 11 total)
Reply To: Error in Generate POJO

You must be logged in to post in the forum log in