当前位置: 首页 > 知识库问答 >
问题:

javax.validation.constraints。NotNull强制多个与TONE相关的字段进行内部联接。我们能避免吗?

王宏扬
2023-03-14

这是关于JPA实体中使用的JSR-303 NotNull验证约束。

我们观察到,当调用对应CRUD存储库的findOne(id)方法时,ManyToOne映射字段上的javax . validation . constraints . not null注释导致父实体上的内部连接,而不是左外部连接。

有没有办法避免/覆盖此默认行为?

我需要每个地方的左外连接,即使我使用@NotNull注释进行 ManyToOne 映射。

仅供参考,目前我使用sprint data JPA作为我的JPA提供商。

共有1个答案

拓拔坚
2023-03-14

您正在观察的是Hibernate ORM和Bean验证集成的一部分。

这种集成基本上采用Bean验证注释,如果有等效的ORM映射,它基本上确保ORM映射和Bean验证映射是等效的。

举几个例子:

@NotNull将有效地使一对一关联为空 = false
@Size(max=500)实际上表示@Column(长度=500)。

解决这个问题的一个方法是在这里分担责任。这是一个非常常见的场景,其中您有一些东西需要以稍微不同的语义共存。

不要让您的实体兼作持久对象和验证对象,而是使用DTO或值对象通过bean验证进行验证。您只需在业务域层中手动调用bean验证,如果有效,请在应用更改之前映射到持久对象。

 类似资料:
  • 问题内容: 我们可以完全禁用字符串的实习吗?它可能并没有真正的帮助,只是一个想法。我可以认为至少有一点会有所帮助,即在jvm调整期间,控制perm gen的大小。 例如,如果我给出一个OSGI框架,并且任何人都可以添加任意数量的捆绑包,并且每个捆绑包字符串内插都可以完全搞乱我的调整参数。(当然,我知道我们应该在给定的固定发行版上进行调音,但是仍然…) 有什么想法吗!! 问题答案: 对于现代JVM,

  • 问题内容: 这有效: 这有效: 这适用于Oracle 11g,但不适用于10g(版本10.2.0): 除了Oracle版本(使用相同的转储创建基础),我看不出其他区别。由于我怀疑Oracle 10g中的错误,因此我接受与该问题明显相关的错误报告作为答案。 当然也可以接受直接的解决方案或解决方法。 问题答案: 我不会很快接受我自己的答案。 随时提交更精确的报告,尤其是当您从Oracle找到公开的错误

  • SQL Server 2000 使用20多个视图,所有视图都与table1(id和value1以及value2)进行内部连接 表1 或 表2 从表1中,value1或value2应始终为null。现在的问题是,如果value1或value2列为null,则输出显示为null,因为所有视图都是id为value1、value2的内部联接 我想使用条件进行内部联接,如果value1不为null,则使用v

  • 我有一个查询,以获得用户的朋友的数据。我有三个表,一个是user表,第二个是user_friend表,它有user_id和friend_id(都是user表的外键),第三个表是feed表,它有user_id和feed内容。饲料可以给朋友看。我可以通过两种方式查询,要么通过join查询,要么通过使用子句查询(我可以通过graph数据库获取所有朋友的ID,我正在使用它进行网络连接)。 以下是两个查询:

  • Hibernate5.2.10 查询DSL(jpa,apt)4.1.4 Spring Boot 1.5.6 Spring Data JPA(因此,使用存储库) 存储库扩展 选择以下meetupCampaign.id=x *meetupCampaign.ApprovalStatus=y的关联会议: *meetupCampaign.id=x *meetupCampaign.ApprovalStatus

  • 问题内容: 所以我有四个桌子。每个表都有一个与前一个表ID相同的ID。因此,我的点击表中有一个ID和一个广告来源的ID。在广告表中,它有一个广告ID和一个来自其广告系列的ID。所以这是一个例子。 因此,要找出表4中的值从何而来,我需要遍历每个表并检查它们具有哪个ID。基本上,我想知道表1中的哪些值与表4中的值相关联。 表4中的内容是网站的访问者,表1中的内容是互联网广告。我想知道哪些访客来自哪些广