【发布时间】:2021-09-20 17:38:06
【问题描述】:
在我的数据库中,我有 users、roles 和 classifications 的表。一个用户只能有一个角色和一个分类。这些表不包含任何外键。相反,我有两个连接表; user_roles 和 user_classifications。这些表中的每一行都将user_id 与role_id 和classification_id 相关联。这是可取的,因为可以将相同的角色/分类分配给多个唯一用户。这样就不需要有多个具有相同角色/分类但具有指向用户的不同外键的行。
roles 和classifications 表比较简单,一个id 列和一个name 列,名称为VARCHAR 类型。我有一个 Spring 应用程序,其中 UserRepository 扩展 JpaRepository,User 模型包含 javax.persistence 注释。这里是:
@Entity
@Table(name = "users")
public class User {
@Id
private String id;
// ... other fields here
@OneToOne
@JoinTable(
name = "user_classifications",
joinColumns = @JoinColumn(
name = "user_id",
referencedColumnName = "id"
),
inverseJoinColumns = @JoinColumn(
name = "classification_id",
referencedColumnName = "id"
))
private Classification classification;
@OneToOne
@JoinTable(
name = "user_roles",
joinColumns = @JoinColumn(
name = "user_id",
referencedColumnName = "id"
),
inverseJoinColumns = @JoinColumn(
name = "role_id",
referencedColumnName = "id"
))
private Role role;
// ... the rest of the model
}
@Entity
@Table(name = "roles")
public class Role {
@Id
private String id;
@Column(name = "role_name")
private String name;
}
@Entity
@Table(name = "classifications")
public class Classification {
@Id
private String id;
@Column(name = "classification_name")
private String name;
}
最初,role 和 classification 字段是 String 类型。 Jpa 不喜欢这样,因为它希望映射到镜像相应表的对象。所以为了让 Jpa 高兴,我为 Role 和 Classification 创建了额外的 POJO。这很有效,我可以看到从 Jpa 返回的对象,包括 id 和 name 字段。问题是我的前端需要字符串类型。我可以修改前端以“检查”返回的模型并只保留相关的字符串数据(名称)。我不得不想象我在这里遗漏了一些东西,只需从对象中设置字符串值是可能的。在谷歌上搜索答案时,我觉得我问错了问题。我希望通过在这里解释我的情况,我会得到更好的结果。非常感谢您的帮助。
【问题讨论】: