gpt4 book ai didi

java - 在持久实体中使用 Java 构造函数

转载 作者:行者123 更新时间:2023-12-04 06:52:28 24 4
gpt4 key购买 nike

我是 JPA 的新手,并且无论如何都在 Java 中使用持久性,我有两个问题我无法解决:我生成的标签为:

@JoinColumn(name = "UserName", referencedColumnName = "UserName")
@ManyToOne(optional = false)
private User userName;
@JoinColumn(name = "DatasetNo", referencedColumnName = "DatasetNo")
@ManyToOne(optional = false)
private Dataset datasetNo;

但是在该类的一个构造函数中,没有对列 UserName 或 DatasetNo 进行引用,而在构造函数中引用了类中的所有其他列。

谁能告诉我这是为什么?两列 UserName 和 DatasetNo 都是实体可视化上的“外键”,对应于同名的数据库表。我不能完全解决ORM。

在使用实体类或 POJO 时,最好使用以下类变量:

私有(private)用户用户名;

指定类的实例或仅指定该类实例的键的位置,例如:

私有(private)字符串用户名;

谢谢

摩根先生。

最佳答案

构造函数的编写方式只是您用来从模式创建类的任何自动生成工具的一个特性。如果您想要一个接受它们的构造函数,请随意添加它。需要知道您使用的是哪一个以及它是如何配置的以评论它为什么会这样工作:)

通常最好映射实际的对象关系。毕竟这就是 ORM 的全部意义,不是吗?拥有一个实际的、可用的对象域来映射到数据库中的内容,而不是需要进一步操作才能将其制成可用业务对象的哑结构。如果您希望能够明智地编写对象查询,您也将需要它们。

写起来好多了:

Select roles from UserRoles roles where role.user.isAdmin = true


Select roles from UserRules roles join Users u on roles.userName = u.userName where u.isAdmin = true

根据您的显示技术, View 绑定(bind)具有真实的对象关系也很有帮助。

请注意,您的自动生成工具创建的属性名称也是任意的。没有要求它们与列名匹配。
public User getUserName()实际上是相当愚蠢的。
您当然可以将其更改为 public User getUser()

关于java - 在持久实体中使用 Java 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com