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

标签 java class persistence instances

我是 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 这两列都是实体 Visualization 上的“外键”,对应于同名的数据库表。我不太清楚 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/

相关文章:

python - 从两侧实现 __rmul__,python

java - 将子类对象分配给父类(super class)引用的目的?

netbeans - 在 JBoss 中设置 Mysql 连接器模块

java - Spring JPA : Saving an entity Object in database

java - 使用 Ribbon 自动重试(无 zuul): not working + wrong documentation?

java - 同步关键字是否会阻止线程在锁定时使用自己的变量?

java - 获取调用页面的URL Java

java - 如何在 Eclipse 动态 Web 应用程序中使用 java jar 库

Javascript继承,成员未定义

hibernate - 使用JPA 2配置持久性和orm