a067: Persistente Klasse als Entity markieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Entity;
@Entity(name = "OrderEntity")
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a068: Tabellenname explizit setzen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Table;
import jakarta.persistence.Entity;
@Entity
@Table(name = "orders", schema = "billing")
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a069: Primärschlüssel markieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Id;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@Id
private Long id;
private String orderNumber;
}
a070: ID-Generierung konfigurieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GenerationType;
@Entity
public class OrderEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "order_seq")
private Long id;
private String orderNumber;
}
a071: Sequenzgenerator passend konfigurieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@SequenceGenerator(name = "order_seq", sequenceName = "seq_order", allocationSize = 50)
private Long id;
private String orderNumber;
}
a072: Spalten präzise definieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@Column(name = "customer_no", nullable = false, length = 40)
private Long id;
private String orderNumber;
}
a073: Optimistisches Locking aktivieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Version;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@Version
private Long id;
private String orderNumber;
}
a074: Enum sicher speichern
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Enumerated;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.EnumType;
@Entity
public class OrderEntity {
@Id
@Enumerated(EnumType.STRING)
private Long id;
private String orderNumber;
}
a075: Große Daten getrennt behandeln
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Lob;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@Lob
private Long id;
private String orderNumber;
}
a076: Nicht persistentes Feld markieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Transient;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@Transient
private Long id;
private String orderNumber;
}
a077: Viele-zu-eins Beziehung definieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;
@Entity
public class OrderEntity {
@Id
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Long id;
private String orderNumber;
}
a078: Join-Spalte explizit machen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.JoinColumn;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@JoinColumn(name = "customer_id", nullable = false)
private Long id;
private String orderNumber;
}
a079: Eins-zu-viele Beziehung korrekt besitzen lassen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.OneToMany;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.CascadeType;
@Entity
public class OrderEntity {
@Id
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private Long id;
private String orderNumber;
}
a080: Eins-zu-eins Beziehung gezielt mappen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.OneToOne;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;
@Entity
public class OrderEntity {
@Id
@OneToOne(fetch = FetchType.LAZY, optional = false)
private Long id;
private String orderNumber;
}
a081: Viele-zu-viele bewusst vermeiden oder mappen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.ManyToMany;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;
@Entity
public class OrderEntity {
@Id
@ManyToMany(fetch = FetchType.LAZY)
private Long id;
private String orderNumber;
}
a082: Join-Tabelle präzise definieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.JoinTable;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@JoinTable(name = "user_role")
private Long id;
private String orderNumber;
}
a083: Embeddable Value Object definieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Embeddable;
@Embeddable
public class MoneyAmount {
private java.math.BigDecimal value;
private String currency;
}
a084: Value Object einbetten
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class InvoiceEntity {
@Id
private Long id;
@Embedded
private BillingAddress billingAddress;
}
a085: Spalten eines Embeddables überschreiben
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.AttributeOverride;
@Entity
public class OrderEntity {
@Id
@AttributeOverride(name = "zipCode", column = @Column(name = "billing_zip"))
private Long id;
private String orderNumber;
}
a086: Wertkollektion mappen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;
@Entity
public class OrderEntity {
@Id
@ElementCollection(fetch = FetchType.LAZY)
private Long id;
private String orderNumber;
}
a087: Collection-Tabelle benennen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class OrderEntity {
@Id
@CollectionTable(name = "order_tags")
private Long id;
private String orderNumber;
}
a088: Benannte Query definieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.NamedQuery;
import jakarta.persistence.Entity;
@Entity
@NamedQuery(name = "Order.findOpen", query = "select o from OrderEntity o where o.status = 'OPEN'")
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a089: EntityGraph gegen N+1 definieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.NamedEntityGraph;
import jakarta.persistence.Entity;
@Entity
@NamedEntityGraph(name = "Order.withLines")
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a090: Attributknoten im EntityGraph setzen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import jakarta.persistence.NamedAttributeNode;
import jakarta.persistence.Entity;
@Entity
@NamedAttributeNode(value = "lines")
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a091: Cache-Strategie markieren
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import org.hibernate.annotations.Cache;
import jakarta.persistence.Entity;
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "orders")
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a092: BatchSize gegen N+1 einstellen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import org.hibernate.annotations.BatchSize;
import jakarta.persistence.Entity;
@Entity
@BatchSize(size = 50)
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a093: Where-Klausel für Soft Delete setzen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import org.hibernate.annotations.Where;
import jakarta.persistence.Entity;
@Entity
@Where(clause = "deleted = false")
public class OrderEntity {
@jakarta.persistence.Id
private Long id;
private String status;
}
a094: Creation Timestamp automatisch setzen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import org.hibernate.annotations.CreationTimestamp;
@Entity
public class OrderEntity {
@Id
@CreationTimestamp
private Long id;
private String orderNumber;
}
a095: Update Timestamp automatisch setzen
Ausgangspunkt-Code
public class OrderRecord {
private Long id;
private String status;
boolean isPersistent() {
return false;
}
}
Ziel-Code
import org.hibernate.annotations.UpdateTimestamp;
@Entity
public class OrderEntity {
@Id
@UpdateTimestamp
private Long id;
private String orderNumber;
}
a096: Basic gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Basic(optional = false, fetch = FetchType.LAZY)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a097: Access gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Access(AccessType.FIELD)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a098: MappedSuperclass gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@MappedSuperclass
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a099: Inheritance gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a100: DiscriminatorColumn gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@DiscriminatorColumn(name = "invoice_type", discriminatorType = DiscriminatorType.STRING)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a101: DiscriminatorValue gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@DiscriminatorValue("CREDIT_NOTE")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a102: SecondaryTable gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SecondaryTable(name = "invoice_audit")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a103: SecondaryTables gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SecondaryTables({@SecondaryTable(name = "invoice_audit"), @SecondaryTable(name = "invoice_flags")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a104: PrimaryKeyJoinColumn gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@PrimaryKeyJoinColumn(name = "invoice_id")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a105: EmbeddedId gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
public record InvoiceLineId(Long invoiceId, Integer lineNo) implements java.io.Serializable {}
@Entity
@Table(name = "invoice_line")
public class InvoiceLineEntity {
@EmbeddedId
private InvoiceLineId id;
}
a106: IdClass gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@IdClass(InvoiceLineId.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a107: MapsId gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@MapsId("invoiceId")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a108: OrderBy gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@OrderBy("createdAt DESC")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a109: OrderColumn gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@OrderColumn(name = "line_order")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a110: MapKey gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@MapKey(name = "code")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a111: MapKeyColumn gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@MapKeyColumn(name = "property_key", length = 80)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a112: MapKeyEnumerated gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@MapKeyEnumerated(EnumType.STRING)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a113: MapKeyTemporal gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@MapKeyTemporal(TemporalType.DATE)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a114: Convert gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Convert(converter = InvoiceStatusConverter.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a115: Converter gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Converter(autoApply = false)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a116: Converters gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Converters({@Convert(converter = InvoiceStatusConverter.class)})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a117: NamedQueries gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@NamedQueries({@NamedQuery(name = "Invoice.open", query = "select i from InvoiceEntity i where i.paid = false")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a118: NamedNativeQuery gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@NamedNativeQuery(name = "Invoice.overdue", query = "select * from invoice where due_date < current_date", resultClass = InvoiceEntity.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a119: NamedNativeQueries gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@NamedNativeQueries({@NamedNativeQuery(name = "Invoice.paid", query = "select * from invoice where paid = true", resultClass = InvoiceEntity.class)})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a120: NamedStoredProcedureQuery gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@NamedStoredProcedureQuery(name = "Invoice.recalculate", procedureName = "recalculate_invoice")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a121: NamedStoredProcedureQueries gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@NamedStoredProcedureQueries({@NamedStoredProcedureQuery(name = "Invoice.closeMonth", procedureName = "close_billing_month")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a122: StoredProcedureParameter gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@NamedStoredProcedureQuery(name = "Invoice.total", procedureName = "invoice_total", parameters = @StoredProcedureParameter(name = "p_invoice_id", mode = ParameterMode.IN, type = Long.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a123: SqlResultSetMapping gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SqlResultSetMapping(name = "InvoiceSummaryMapping", columns = {@ColumnResult(name = "total")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a124: SqlResultSetMappings gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SqlResultSetMappings({@SqlResultSetMapping(name = "InvoiceTotalMapping", columns = @ColumnResult(name = "gross_total"))})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a125: ConstructorResult gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SqlResultSetMapping(name = "InvoiceDtoMapping", classes = @ConstructorResult(targetClass = InvoiceSummary.class, columns = @ColumnResult(name = "gross_total")))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a126: ColumnResult gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SqlResultSetMapping(name = "InvoiceTotalMapping", columns = @ColumnResult(name = "gross_total", type = java.math.BigDecimal.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a127: EntityResult gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SqlResultSetMapping(name = "InvoiceEntityMapping", entities = @EntityResult(entityClass = InvoiceEntity.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a128: FieldResult gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@SqlResultSetMapping(name = "InvoiceLegacyMapping", entities = @EntityResult(entityClass = InvoiceEntity.class, fields = @FieldResult(name = "invoiceNumber", column = "INV_NO")))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a129: AssociationOverride gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@AssociationOverride(name = "customer", joinColumns = @JoinColumn(name = "billing_customer_id"))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a130: AssociationOverrides gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@AssociationOverrides({@AssociationOverride(name = "customer", joinColumns = @JoinColumn(name = "bill_customer_id"))})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a131: AttributeOverrides gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@AttributeOverrides({@AttributeOverride(name = "amount", column = @Column(name = "gross_amount"))})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a132: PersistenceContext gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
public class InvoiceRepository {
@PersistenceContext(unitName = "billingPU")
private EntityManager entityManager;
public InvoiceEntity find(Long id) { return entityManager.find(InvoiceEntity.class, id); }
}
a133: PersistenceUnit gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
public class InvoiceRepository {
@PersistenceUnit(unitName = "billingPU")
private EntityManager entityManager;
public InvoiceEntity find(Long id) { return entityManager.find(InvoiceEntity.class, id); }
}
a134: PrePersist gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private java.time.Instant changedAt;
@PrePersist
void auditLifecycle() {
this.changedAt = java.time.Instant.now();
}
}
a135: PostPersist gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private java.time.Instant changedAt;
@PostPersist
void auditLifecycle() {
this.changedAt = java.time.Instant.now();
}
}
a136: PreUpdate gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private java.time.Instant changedAt;
@PreUpdate
void auditLifecycle() {
this.changedAt = java.time.Instant.now();
}
}
a137: PostUpdate gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private java.time.Instant changedAt;
@PostUpdate
void auditLifecycle() {
this.changedAt = java.time.Instant.now();
}
}
a138: PreRemove gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private java.time.Instant changedAt;
@PreRemove
void auditLifecycle() {
this.changedAt = java.time.Instant.now();
}
}
a139: PostRemove gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private java.time.Instant changedAt;
@PostRemove
void auditLifecycle() {
this.changedAt = java.time.Instant.now();
}
}
a140: PostLoad gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private java.time.Instant changedAt;
@PostLoad
void auditLifecycle() {
this.changedAt = java.time.Instant.now();
}
}
a141: EntityListeners gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@EntityListeners(InvoiceAuditListener.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a142: ExcludeDefaultListeners gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@ExcludeDefaultListeners
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a143: ExcludeSuperclassListeners gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@ExcludeSuperclassListeners
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a144: Temporal gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Temporal(TemporalType.TIMESTAMP)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a145: UniqueConstraint gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Table(name = "invoice", uniqueConstraints = @UniqueConstraint(name = "uk_invoice_tenant_number", columnNames = {"tenant_id", "invoice_number"}))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a146: Index gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@Table(name = "invoice", indexes = @Index(name = "idx_invoice_due_date", columnList = "due_date"))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a147: ForeignKey gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
@JoinColumn(name = "customer_id", foreignKey = @ForeignKey(name = "fk_invoice_customer"))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a148: NaturalId gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@NaturalId(mutable = false)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a149: Immutable gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@Immutable
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a150: Formula gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@Formula("gross_total - paid_total")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a151: Filter gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a152: FilterDef gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@FilterDef(name = "tenantFilter", parameters = @ParamDef(name = "tenantId", type = String.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a153: ParamDef gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@FilterDef(name = "customerFilter", parameters = @ParamDef(name = "customerId", type = Long.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a154: SQLDelete gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@SQLDelete(sql = "update invoice set deleted = true where id = ?")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a155: SoftDelete gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@SoftDelete(columnName = "deleted")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a156: DynamicUpdate gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@DynamicUpdate
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a157: DynamicInsert gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@DynamicInsert
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a158: Fetch gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@Fetch(FetchMode.SUBSELECT)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a159: NotFound gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@NotFound(action = NotFoundAction.IGNORE)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a160: OnDelete gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@OnDelete(action = OnDeleteAction.CASCADE)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a161: Subselect gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@Subselect("select id, customer_id, gross_total from invoice_report_view")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a162: Synchronize gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@Synchronize({"invoice", "invoice_line"})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a163: UuidGenerator gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@UuidGenerator(style = UuidGenerator.Style.TIME)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a164: JdbcTypeCode gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@JdbcTypeCode(SqlTypes.JSON)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a165: Nationalized gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@Nationalized
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}
a166: TenantId gezielt im Enterprise-Kontext einsetzen
Ausgangspunkt-Code
public class InvoiceEntity {
private Long id;
private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;
@TenantId
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
@Id
private Long id;
private String invoiceNumber;
}