Pular para o conteúdo principal

DomainEntityBase

Classe base para entidades de domínio do Archbase.

Hierarquia

DomainEntityBase<T, ID>
├── PersistenceEntityBase<T, ID> # Entidades persistíveis
└── DomainAggregatorBase<T> # Aggregates

Métodos Principais

MétodoDescrição
getID()Retorna o ID da entidade
setID(ID id)Define o ID da entidade
getVersion()Retorna a versão para optimistic locking
getCreatedAt()Retorna a data de criação
getUpdatedAt()Retorna a data de atualização
validate()Valida a entidade (sobrescrever nas subclasses)

Criando uma Entidade

package com.exemplo.domain.entity;

import br.com.archbase.ddd.domain.entity.PersistenceEntityBase;
import br.com.archbase.ddd.domain.entity.DomainEntity;
import jakarta.persistence.Entity;
import java.util.UUID;

@Entity
@DomainEntity
public class Cliente extends PersistenceEntityBase<Cliente, UUID> {

private String nome;
private String email;

// Construtor padrão JPA
protected Cliente() {}

// Construtor de domínio
public Cliente(String nome, String email) {
this.nome = nome;
this.email = email;
}

@Override
public ValidationResult validate() {
return new Cliente.Validator().validate(this);
}

static class Validator extends AbstractArchbaseValidator<Cliente> {
@Override
public void rules() {
ruleFor(Cliente::getNome)
.must(not(stringEmptyOrNull()))
.withMessage("Nome é obrigatório")
.withFieldName("nome")
.critical();
}
}
}

Lifecycle Callbacks

@Entity
public class Pedido extends PersistenceEntityBase<Pedido, UUID> {

@PrePersist
protected void onCreate() {
this.dataCriacao = LocalDateTime.now();
this.status = StatusPedido.CRIADO;
}

@PreUpdate
protected void onUpdate() {
this.dataAtualizacao = LocalDateTime.now();
}

@PostLoad
protected void onLoad() {
// Executado após carregar do banco
}

@PreRemove
protected void onRemove() {
// Executado antes de deletar
}
}

Equals e HashCode

@Entity
public class Cliente extends PersistenceEntityBase<Cliente, UUID> {

// Equals e hashCode são baseados no ID automaticamente
// Para entidades transientes, use um identificador de negócio

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Cliente)) return false;
Cliente other = (Cliente) o;
// Comparação por ID quando persistido
if (getId() != null && other.getId() != null) {
return getId().equals(other.getId());
}
// Comparação por atributo de negócio quando transiente
return Objects.equals(email, other.email);
}
}

Próximos Passos