如何使用 AbstractAggregateRoot<T> 或注解 DomainEvents with Java Records
How to use AbstractAggregateRoot<T> or the annotation DomainEvents with Java Records
我正在尝试发展一个域,其中包含它并使用 Java 记录实现聚合根,但我无法找到一种方法来使用 Domain Event
概念从一个传播事件聚合根。
https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#core.domain-events
以下语法的编译问题:
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.domain.AbstractAggregateRoot;
@Table("BALANCE")
public record Balance extends AbstractAggregateRoot<Balance> (
@Id
@Column("ID_BALANCE")
Long balanceId,
@Column("BALANCE")
BigDecimal balance,
@Column("ID_CUSTOMER")
Long customerId,
@Column("LAST_UPDATE")
Timestamp lastUpdate,
@Column("WITHDRAW_LIMIT")
BigDecimal withdrawLimit
) {
//Business logic
}
这个语法没有问题:
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.domain.AbstractAggregateRoot;
public class BalanceDemo extends AbstractAggregateRoot<BalanceDemo> {
@Id
@Column("ID_BALANCE")
Long balanceId;
@Column("BALANCE")
BigDecimal balance;
@Column("ID_CUSTOMER")
Long customerId;
@Column("LAST_UPDATE")
Timestamp lastUpdate;
@Column("WITHDRAW_LIMIT")
BigDecimal withdrawLimit;
//Constructors, Get, HashCode, Equals, toString
//Business Logic
}
怎么了? Java 记录不能与 Domain Events
结合使用吗?
正如 Tim Moore 在评论中所写,Java 记录不能扩展另一个 class,因为它已经隐含地扩展了 java.lang.Record
。
因此您可以将相关代码从 AbstractAggregateRoot
复制到您的记录中,或者在您的记录中拥有它的一个实例并在相关方法实现中委托给它。
我正在尝试发展一个域,其中包含它并使用 Java 记录实现聚合根,但我无法找到一种方法来使用 Domain Event
概念从一个传播事件聚合根。
https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#core.domain-events
以下语法的编译问题:
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.domain.AbstractAggregateRoot;
@Table("BALANCE")
public record Balance extends AbstractAggregateRoot<Balance> (
@Id
@Column("ID_BALANCE")
Long balanceId,
@Column("BALANCE")
BigDecimal balance,
@Column("ID_CUSTOMER")
Long customerId,
@Column("LAST_UPDATE")
Timestamp lastUpdate,
@Column("WITHDRAW_LIMIT")
BigDecimal withdrawLimit
) {
//Business logic
}
这个语法没有问题:
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.domain.AbstractAggregateRoot;
public class BalanceDemo extends AbstractAggregateRoot<BalanceDemo> {
@Id
@Column("ID_BALANCE")
Long balanceId;
@Column("BALANCE")
BigDecimal balance;
@Column("ID_CUSTOMER")
Long customerId;
@Column("LAST_UPDATE")
Timestamp lastUpdate;
@Column("WITHDRAW_LIMIT")
BigDecimal withdrawLimit;
//Constructors, Get, HashCode, Equals, toString
//Business Logic
}
怎么了? Java 记录不能与 Domain Events
结合使用吗?
正如 Tim Moore 在评论中所写,Java 记录不能扩展另一个 class,因为它已经隐含地扩展了 java.lang.Record
。
因此您可以将相关代码从 AbstractAggregateRoot
复制到您的记录中,或者在您的记录中拥有它的一个实例并在相关方法实现中委托给它。