我们有一个YesNo的用户定义数据类型,它具有char(1)的别名.该类型具有绑定规则(必须为Y或N)和默认(N).
这样做的目的是当任何开发团队创建一个类型为YesNo的新字段时,规则和默认值将自动绑定到新列.
规则和默认值已被弃用,并且在下一个SQL Server的未来版本中将不可用,是否有其他方法可以实现相同的功能?
我应该补充一点,我知道我可以使用CHECK和DEFAULT约束来复制绑定的Rule和Defalut对象的功能,但是这些必须在每次使用类型时应用,而不是免费获得功能'通过使用具有绑定规则和默认值的UDT.
该帖子涉及一个支持现有应用程序而不是新开发的数据库,所以我知道我们对UDT的使用并不是最优的.
我怀疑这个问题的答案是'不',但是通常当不推荐使用功能时,通常会有一种替代语法可以作为替代品使用,因此我想提出一个问题,以防有人知道替代方案.
我正在构建一个基于Spring Data REST/Spring HATEOAS的应用程序,并且我正在尝试遵循此处(以及其他地方)概述的DDD原则:
特别是通过专用资源的聚合和复杂状态变化的概念.
还要避免将HTTP PATCH或PUT用于业务域的(复杂)状态转换,因为您错过了有关触发此更新的实际业务域事件的大量信息.例如,更改客户的邮件地址是对新"ChangeOfAddress"资源的POST,而不是具有不同邮件地址字段值的"Customer"资源的PATCH或PUT.
我正在努力的是一种强制执行此操作的方法,同时允许对聚合根进行外观修改.
使用这个简化的例子:
@Entity
public class Customer
{
private @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id;
private String name;
private String comment;
@Access(AccessType.PROPERTY)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Address> addresses = new HashSet<>();
... getters and setters
public void addAddress(Address address)
{
addresses.add(address);
... custom code to raise events etc
}
}
public interface Customer extends CrudRepository<Customer, Long>
{
}
Run Code Online (Sandbox Code Playgroud)
允许更改化妆品(例如更新评论)但阻止直接更新子集合的更改的最佳/正确方法是什么?
如果尝试修改子集合,如果让setter抛出异常,我唯一能想到的就是这样做.
java spring domain-driven-design spring-data-rest spring-hateoas
有什么方法可以防止 Spring Data REST 为覆盖的存储库方法创建 /search URL?
例如,以下代码会生成一个 /search/findAll URL,该 URL 复制了集合资源的功能:
public interface EmployeeRepository extends CrudRepository<Employee, Long>
{
@Override
@Query("SELECT e FROM Empolyee e")
Iterable<Employee> findAll();
}
Run Code Online (Sandbox Code Playgroud)
这只是覆盖单个方法时的表面问题,但如果您尝试覆盖具有相同函数名称和不同参数的多个方法,例如 PagingAndSortingRepository 中的两个 findAll 方法,则 spring 会抛出异常,因为它试图将 2 个函数映射到相同的函数小路。
public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long>
{
@Override
@Query("SELECT e FROM Employee e")
Iterable<Employee> findAll();
@Override
@Query("SELECT e FROM Employee e")
Iterable<Employee> findAll(Sort sort);
@Override
@Query("SELECT e FROM Employee e")
Page<Employee> findAll(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
结果是:
java.lang.IllegalStateException: Ambiguous search mapping detected. Both public abstract …
Run Code Online (Sandbox Code Playgroud)