【发布时间】:2021-10-05 07:15:31
【问题描述】:
假设我有两个实体加入如下:
@Entity
public class User {
@Id
private Long id;
private String username;
private String password;
@ManyToOne
@JoinColumn(name="role_id", referencedColumnName = "id") //Table user in database has foreign key role_id
private Role role;
}
@Entity
public class Role {
@Id
private Long id;
private String name;
}
如何仅创建仅具有一个角色属性而不是整个属性的用户实体? (例如,仅角色名称)
我期待类似的东西
@Entity
public class User {
@Id
private Long id;
private String username;
private String password;
// Some prefix or annotation maybe?
private String role_name;
}
【问题讨论】:
-
你不能。如果您的角色名称是唯一的,那么您可以将其用作 PK 并将其映射到
User实体中。不属于User表(或某些联结表)的任何其他字段都不能映射到User表中。 -
即使使用@Query 或某种视图 (SQL) 方法?
-
好吧,你可以使用DTO projections。这样您就可以拥有一个包含您喜欢的任何字段的对象,但您将无法像在
@Entity上那样进行任何操作。 -
我已经阅读了一些 DTO 方法。虽然它可以解决问题,但我想它会出现 N+1 问题
-
不,不会。您只有 1 个查询,并将结果映射到 DTO。您没有迭代延迟加载的
*ToMany关系。
标签: java spring spring-boot hibernate