Chapter 4. Creating Java Classes

Table of Contents

Creating Java Classes

Here we'll generate the Java classes from the model that was created in the previous section. CayenneModeler can be used to also generate the database schema, but since we specified "CreateIfNoSchemaStrategy" earlier when we created a DataNode, we'll skip the database schema step. Still be aware that you can do it if you need to via "Tools > Create Database Schema".

Creating Java Classes

  • Select "Tools > Generate Classes" menu.

  • For "Type" select "Standard Persistent Objects", if it is not already selected.

  • For the "Output Directory" select "src/main/java" folder under your Eclipse project folder (this is a "peer" location to the cayenne-*.xml location we selected before).

  • Click on "Entities" tab and check the "Check All Classes" checkbox (unless it is already checked and reads "Uncheck all Classes").

  • Click "Generate"

Now go back to Eclipse, right click on "tutorial" project and select "Refresh" - you should see pairs of classes generated for each mapped entity. You probably also see that there's a bunch of red squiggles next to the newly generated Java classes in Eclipse. This is because our project does not include Cayenne as a Maven dependency yet. Let's fix it now by adding "cayenne-server" artifact in the bottom of the pom.xml file. The resulting POM should look like this:

<project xmlns="" xmlns:xsi=""

   <!-- Here specify the version of Cayenne you are actually using -->

Your computer must be connected to the internet. Once you save the pom.xml, Eclipse will download the needed Cayenne jar file and add it to the project build path. As a result, all the errors should disappear.

Now let's check the entity class pairs. Each one is made of a superclass (e.g. Artist) and a subclass (e.g. Artist). You should not modify the superclasses whose names start with "_" (underscore), as they will be replaced on subsequent generator runs. Instead all custom logic should be placed in the subclasses in "org.example.cayenne.persistent" package - those will never be overwritten by the class generator.


Class Generation Hint Often you'd start by generating classes from the Modeler, but at the later stages of the project the generation is usually automated either via Ant cgen task or Maven cgen mojo. All three methods are interchangeable, however Ant and Maven methods would ensure that you never forget to regenerate classes on mapping changes, as they are integrated into the build cycle.