我是 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/