Hey all, Running through the tutorials, I know what that error means, but I don't think I've done anything wrong. Can someone take a quick look at this xml/object set and tell me what I did wrong? Any help would be greatly appreciated.
Mapping.xml <?xml version="1.0" encoding="utf-8"?> <data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd" project-version="3.0.0.1"> <property name="defaultPackage" value="org.example.cayenne.persistent"/> <db-entity name="ARTIST"> <db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isMandatory="true"/> <db-attribute name="Name" type="VARCHAR" length="255"/> </db-entity> <db-entity name="PAINTING"> <db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isMandatory="true"/> <db-attribute name="Name" type="VARCHAR" length="255"/> </db-entity> <obj-entity name="Artist" className="main.java.org.example.cayenne.persistent.Artist" dbEntityName="ARTIST"> <obj-attribute name="name" type="java.lang.String" db-attribute-path="Name"/> </obj-entity> <obj-entity name="Painting" className="main.java.org.example.cayenne.persistent.Painting" dbEntityName="PAINTING"> <obj-attribute name="name" type="java.lang.String" db-attribute-path="Name"/> </obj-entity> <db-relationship name="paintings" source="ARTIST" target="PAINTING" toMany="true"> <db-attribute-pair source="ID" target="ID"/> </db-relationship> <db-relationship name="artist" source="PAINTING" target="ARTIST" toMany="false"> <db-attribute-pair source="ID" target="ID"/> </db-relationship> <obj-relationship name="paintings" source="Artist" target="Painting" deleteRule="Deny" db-relationship-path="paintings"/> <obj-relationship name="artist" source="Painting" target="Artist" deleteRule="Deny" db-relationship-path="artist"/> </data-map> _Artist.java public abstract class _Artist extends CayenneDataObject { public static final String NAME_PROPERTY = "name"; public static final String PAINTINGS_PROPERTY = "paintings"; public static final String ID_PK_COLUMN = "ID"; public void setName(String name) { writeProperty("name", name); } public String getName() { return (String)readProperty("name"); } public void addToPaintings(Painting obj) { addToManyTarget("paintings", obj, true); } public void removeFromPaintings(Painting obj) { removeToManyTarget("paintings", obj, true); } @SuppressWarnings("unchecked") public List<Painting> getPaintings() { return (List<Painting>)readProperty("paintings"); } } _Painting.java public abstract class _Painting extends CayenneDataObject { public static final String NAME_PROPERTY = "name"; public static final String ARTIST_PROPERTY = "artist"; public static final String ID_PK_COLUMN = "ID"; public void setName(String name) { writeProperty("name", name); } public String getName() { return (String)readProperty("name"); } public void setArtist(Artist artist) { setToOneTarget("artist", artist, true); } public Artist getArtist() { return (Artist)readProperty("artist"); } } JUnit test case: // JUnit public void testBuild() throws Exception { System.out.println("Begin Test"); try { ObjectContext context = DataContext.createDataContext(); Artist picasso = context.newObject(Artist.class); picasso.setName("Pablo Picasso"); Painting girl = context.newObject(Painting.class); girl.setName("Girl Reading at a Table"); girl.setArtist(picasso); Painting stein = context.newObject(Painting.class); stein.setName("Gertrude Stein"); stein.setArtist(picasso); picasso.addToPaintings(girl); picasso.addToPaintings(stein); context.commitChanges(); } catch (Exception e) { e.printStackTrace(); } System.out.println("End Test"); }