Available in versions: Dev (3.20) | Latest (3.19) | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11 | 3.10

This documentation is for the unreleased development version of jOOQ. Click on the above version links to get this documentation for a supported version of jOOQ.

Generated POJOs

Applies to ✅ Open Source Edition   ✅ Express Edition   ✅ Professional Edition   ✅ Enterprise Edition

Every table and view in your database will generate a POJO implementation that looks like this:

// JPA annotations can be generated, optionally
@Entity
@Table(name = "BOOK", schema = "TEST")
public class Book implements java.io.Serializable

// An interface common to records and pojos can be generated, optionally
, IBook {

    // JSR-303 annotations can be generated, optionally
    @NotNull
    private Integer id;

    @NotNull
    private Integer authorId;

    @NotNull
    @Size(max = 400)
    private String title;

    // Every column generates a getter and a setter
    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 7)
    @Override
    public Integer getId() {
        return this.id;
    }

    @Override
    public void setId(Integer id) {
        this.id = id;
    }

    // [...]
}
XML (standalone and maven)
Programmatic
Gradle (Kotlin)
Gradle (Groovy)
Gradle (third party)
<configuration>
  <generator>
    <generate>
      <!-- Allows for turning on POJOs generation: default false -->
      <pojos>true</pojos>

      <!-- Optionally, limit POJOs generation to only tables matching this regular expression. -->
      <pojosIncludes>.*</pojosIncludes>

      <!-- Optionally, limit POJOs generation to only tables not matching this regular expression.
           Excludes match before includes. -->
      <pojosExcludes>SYSTEM_TABLE_.*</pojosExcludes>
    </generate>
  </generator>
</configuration>

See the configuration XSD, standalone code generation, and maven code generation for more details.

new org.jooq.meta.jaxb.Configuration()
  .withGenerator(
    new Generate()

      // Allows for turning on POJOs generation: default false
      .withPojos(true)

      // Optionally, limit POJOs generation to only tables matching this regular expression.
      .withPojosIncludes(".*")

      // Optionally, limit POJOs generation to only tables not matching this regular expression.
      // Excludes match before includes.
      .withPojosExcludes("SYSTEM_TABLE_.*")
  )

See the configuration XSD and programmatic code generation for more details.

import org.jooq.meta.jaxb.*


configuration {
  generator {
    generate {

      // Allows for turning on POJOs generation: default false
      isPojos = true

      // Optionally, limit POJOs generation to only tables matching this regular expression.
      pojosIncludes = ".*"

      // Optionally, limit POJOs generation to only tables not matching this regular expression.
      // Excludes match before includes.
      pojosExcludes = "SYSTEM_TABLE_.*"
    }
  }
}

See the configuration XSD and gradle code generation for more details.

configuration {
  generator {
    generate {

      // Allows for turning on POJOs generation: default false
      pojos = true

      // Optionally, limit POJOs generation to only tables matching this regular expression.
      pojosIncludes = ".*"

      // Optionally, limit POJOs generation to only tables not matching this regular expression.
      // Excludes match before includes.
      pojosExcludes = "SYSTEM_TABLE_.*"
    }
  }
}

See the configuration XSD and gradle code generation for more details.

generationTool {
  generator {
    generate {

      // Allows for turning on POJOs generation: default false
      pojos = true

      // Optionally, limit POJOs generation to only tables matching this regular expression.
      pojosIncludes = ".*"

      // Optionally, limit POJOs generation to only tables not matching this regular expression.
      // Excludes match before includes.
      pojosExcludes = "SYSTEM_TABLE_.*"
    }
  }
}

See the configuration XSD and gradle code generation for more details.

As always, when regular expressions are used, they are regular expressions with default flags.

XML (standalone and maven)
Programmatic
Gradle (Kotlin)
Gradle (Groovy)
Gradle (third party)
<configuration>
  <generator>
    <generate>
      <!-- Allows for turning on POJOs generation: default false -->
      <pojos>true</pojos>
    </generate>
  </generator>
</configuration>

See the configuration XSD, standalone code generation, and maven code generation for more details.

new org.jooq.meta.jaxb.Configuration()
  .withGenerator(
    new Generate()

      // Allows for turning on POJOs generation: default false
      .withPojos(true)
  )

See the configuration XSD and programmatic code generation for more details.

import org.jooq.meta.jaxb.*


configuration {
  generator {
    generate {

      // Allows for turning on POJOs generation: default false
      isPojos = true
    }
  }
}

See the configuration XSD and gradle code generation for more details.

configuration {
  generator {
    generate {

      // Allows for turning on POJOs generation: default false
      pojos = true
    }
  }
}

See the configuration XSD and gradle code generation for more details.

generationTool {
  generator {
    generate {

      // Allows for turning on POJOs generation: default false
      pojos = true
    }
  }
}

See the configuration XSD and gradle code generation for more details.

Flags influencing generated POJOs

Additional flags from the code generation configuration influence generated POJOs:

  • daos: POJOs are a pre-requisite for DAOs. If DAOs are generated, POJOs are generated as well
  • dateAsTimestamp: This influences all relevant getters and setters
  • immutablePojos: Immutable POJOs have final members and no setters. All members must be passed to the constructor
  • interfaces: If interfaces are generated, POJOs will implement them
  • jpaAnnotations: JPA annotations are used on generated records (details here)
  • jpaVersion: Version of JPA specification is to be used to generate version-specific annotations. If it is omitted, the latest version is used by default. (details here)
  • pojosAsJavaRecordClasses: If you're using the JavaGenerator, this will generate POJOs as (immutable) Java 16 record types
  • pojosAsScalaCaseClasses: If you're using the ScalaGenerator(or Scala3Generator), this will generate POJOs as (mutable or immutable) Scala case classes
  • pojosAsKotlinDataClasses: If you're using the KotlinGenerator, this will generate POJOs as (mutable or immutable) kotlin data classes
  • pojosToString: Whether POJOs should have a generated toString() implementation.
  • pojosEqualsAndHashCode: Whether POJOs should have generated equals() and hashCode() implementations. These implementations are purely value-based, just like with records, i.e. two POJOs are equal if all their attributes are equal.
  • pojosEqualsAndHashCodeIncludePrimaryKeyOnly: Whether the generated equals() and hashCode() implementations should consider primary key columns only (beware that the implementation is still purely value-based, i.e. two uninitialised null primary key values are then considered equal).
  • pojosEqualsAndHashCodeColumnIncludeExpression: A regular expression matching qualified or unqualified column names that should be included in generated equals() and hashCode() implementations.
  • pojosEqualsAndHashCodeColumnExcludeExpression: A regular expression matching qualified or unqualified column names that should be excluded from generated equals() and hashCode() implementations.
  • unsignedTypes: This influences all relevant getters and setters
  • validationAnnotations: JSR-303 validation annotations are used on generated records (details here)

References to this page

Feedback

Do you have any feedback about this page? We'd love to hear it!

The jOOQ Logo