Interface AuditColumnDefinition<T>

Type Parameters:
T - the underlying type
All Superinterfaces:
AttributeDefinition<T>, ColumnDefinition<T>

public interface AuditColumnDefinition<T> extends ColumnDefinition<T>
A column definition representing an audit column that tracks data modification events.

Audit columns automatically capture information about when and by whom data was inserted or updated. They are typically used for compliance, debugging, and data lineage tracking.

Audit columns are assumed to be automatically populated during insert and update operations by the underlying database:

 public class Store extends DefaultDomain {

     interface Product {
         EntityType TYPE = DOMAIN.entityType("store.product");

         // Regular columns
         Column<Integer> ID = TYPE.integerColumn("id");
         Column<String> NAME = TYPE.stringColumn("name");
         Column<BigDecimal> PRICE = TYPE.bigDecimalColumn("price");

         // Audit columns
         Column<String> CREATED_BY = TYPE.stringColumn("created_by");
         Column<LocalDateTime> CREATED_DATE = TYPE.localDateTimeColumn("created_date");
         Column<String> UPDATED_BY = TYPE.stringColumn("updated_by");
         Column<LocalDateTime> UPDATED_DATE = TYPE.localDateTimeColumn("updated_date");
     }

     void defineProduct() {
         Product.TYPE.define(
                 Product.ID.define()
                     .primaryKey(),
                 Product.NAME.define()
                     .column(),
                 Product.PRICE.define()
                     .column(),

                 // Audit columns for INSERT operations
                 Product.CREATED_BY.define()
                     .auditColumn()
                     .auditAction(AuditAction.INSERT)
                     .caption("Created By"),
                 Product.CREATED_DATE.define()
                     .auditColumn()
                     .auditAction(AuditAction.INSERT)
                     .caption("Created Date"),

                 // Audit columns for UPDATE operations
                 Product.UPDATED_BY.define()
                     .auditColumn()
                     .auditAction(AuditAction.UPDATE)
                     .caption("Updated By"),
                 Product.UPDATED_DATE.define()
                     .auditColumn()
                     .auditAction(AuditAction.UPDATE)
                     .caption("Updated Date"))
             .build();
     }
 }

 // Usage - audit columns are populated automatically
 Entity product = entities.builder(Product.TYPE)
     .with(Product.NAME, "Laptop")
     .with(Product.PRICE, new BigDecimal("999.99"))
     .build();

 // Insert - CREATED_BY and CREATED_DATE are populated automatically
 connection.insert(product);

 String createdBy = product.get(Product.CREATED_BY);         // Current user
 LocalDateTime createdDate = product.get(Product.CREATED_DATE); // Current timestamp

 // Update - UPDATED_BY and UPDATED_DATE are populated automatically
 product.set(Product.PRICE, new BigDecimal("899.99"));
 connection.update(product);

 String updatedBy = product.get(Product.UPDATED_BY);         // Current user
 LocalDateTime updatedDate = product.get(Product.UPDATED_DATE); // Current timestamp

 // Audit columns provide full modification history
 System.out.println("Product created by " + createdBy + " on " + createdDate);
 System.out.println("Product updated by " + updatedBy + " on " + updatedDate);
See Also:
  • Method Details

    • auditAction

      AuditAction auditAction()
      Returns:
      the audit action this column represents