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

Java Spring Boot,以类型安全的方式连接表,不使用纯字符串

阎晔
2023-03-14
from u in db.Users
join ad in db.Address on u.Addressid equals ad.AddressId
select ..
@Entity
@Table(name = "users")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
    //... 

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "address_id", referencedColumnName = "id")
    private Address address;

    // ... getters and setters
}

@Entity
@Table(name = "address")
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
    //...

    @OneToOne(mappedBy = "address")
    private User user;

    //... getters and setters
}

共有1个答案

宫亦
2023-03-14

它是“类型安全的”--因为它们都是字符串。

您的问题是:如果有人使用了“错误的”引用字段,那么在编译时不会检查它。
这是真的,并且不能更改,但是您可以在运行时检查它。
或者更好:Spring/hibernate可以为您这样做。
只需通过将spring.jpa.hibernate.ddl-auto=validate添加到application.ymlapplication.properties来启用hibernate验证。

现在,在启动spring时,您将得到以下异常(如果地址/地址有错误):

由:org.hibernate.annotationexception:在:address.user中的未知mappedBy,引用的属性Unknown:user.adress

您也可以使用其他模式。查看文档。
所有模式(除了none)都将验证模式。
这是最好的解决方案,因为没有编译时检查。

您也可以尝试使用JOOQ。

 类似资料:
  • 问题内容: 有没有一种方法可以在HTML中用破折号(即-或- 或- )创建列表样式,即 输出: 尽管我不知道该选项的弊端,但我想使用类似的方法来做到这一点(并且有很多反馈的义务)。 更笼统地说,我不介意知道如何将通用字符用于列表项。 问题答案: 您可以使用并记住IE 7或更低版​​本不支持此功能。如果您对此表示满意,那么这是您最好的解决方案。有关完整详细信息,请参见“ 我可以使用”或QuirksM

  • 问题内容: 这篇文章]提供了一种检索Windows下正在运行的进程列表的解决方案。本质上,它可以: 然后读取输入。 它的外观和效果很好,但我想知道是否有可能Tasklist使用的字符集可能不是默认字符集,并且此调用可能失败? 如果是这样,是否有办法确定合适的字符集? 问题答案: 可以分为两部分: Windows部分 在Java中,您正在执行Windows命令-在“ Windows Land”中的j

  • 本文向大家介绍python字符串连接方式汇总,包括了python字符串连接方式汇总的使用技巧和注意事项,需要的朋友参考一下 在python中有很多字符串连接方式,今天就在这里具体总结一下: ①.最原始的字符串连接方式:str1 + str2 ②.python 新字符串连接语法:str1, str2 ③.奇怪的字符串方式:str1 str2 ④.% 连接字符串:‘name:%s; sex: ' %

  • 问题内容: 如何在SQL Server的存储过程中转义字符串,以便可以在LIKE表达式中安全使用。 假设我有一个像这样的变量: 我想在LIKE表达式中使用它: 如何在T-SQL中转义字符串(更具体地说,是对LIKE模式匹配有意义的字符,例如%或?),以便可以安全地以这种方式使用? 例如,给定: 我想: 匹配,但没有或。 问题答案: 要在LIKE表达式中转义特殊字符,请在其前面加上转义字符。您可以选

  • 我有一个应用程序正在从jooq切换到jdbc,我使用jdbc创建了一个表,但我需要编辑一些jooq查询来加入它,问题是自动生成的jooq tables类无法识别它,所以有没有办法通过字符串名引用表? 下面是一些示例代码: 我如何在此处加入“连接”表?没有桌子。连接,因为它是以不同的方式创建的。 有很多疑问,所以我们希望根据需要逐步进行转换。 更新:我尝试添加以下内容,并且查询运行,但是我尝试获取的

  • 我在创建带有参数的@Bean时遇到问题,这运行得很好,但在intelliJ中,它给出的错误无法自动连线。找不到“String”类型的bean。 我要做什么?我正在尝试创建具有原型作用域的bean,在IntelliJ“无法自动连线。未找到‘String’类型的bean”中出现此错误有谁能帮我解决这个问题吗 这是原型测试的类