DBSchema-2表(用户和角色)具有多对多关系,并由postgres中的中间表(用户角色)桥接。我想获取所有角色和创建它的人的姓名。名称在用户表中可用,但所有其他详细信息在角色表中。Roles表中有一个由创建人(创建角色的人的用户id)创建的字段。
我正在尝试构建一个GET请求,以查看给定id的所有角色以及创建id的人的姓名
实体类Users1.java
@Data
@Entity
@Table(name = "user")
public class Users1 {
@Id
@Column(name = "user_id")
private Long user_id;
@Column(name = "org_id")
private Long org_id;
@Column(name = "boss")
private Boolean boss;
@Column(name = "firstname")
private String firstname;
@Column(name = "created_by")
private Long created_by;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_on")
private Date created_on;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {CascadeType.ALL})
@JoinTable(name = "user_role",
joinColumns = {@JoinColumn(name = "user_id")},
inverseJoinColumns = {@JoinColumn(name = "created_by")})
private List<Role> roles = new ArrayList<Role>();
// Getters and Setters
实体类角色。JAVA
@Data
@Entity
@Table(name = "role")
public class Role implements Serializable {
private static final long serialVersionUID = -2343243243242432341L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "role_id")
private Long role_id;
@Column(name = "org_id")
private Long org_id;
@Column(name = "role_name")
private String role_name;
@Column(name = "created_by")
private Long created_by;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_on")
private Date created_on;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {CascadeType.ALL},
mappedBy = "roles")
private List<Users1> users = new ArrayList<>();
// Getters and Setters
角色。存储库类
@Repository
@Transactional
public interface RolesRepository extends CrudRepository<Role,Long> {
@Query(value ="select r.*,u.firstname as firstname
from user u
join user_role ur on u.user_id = ur.user_id
join role r on ur.role_id = r.role_id
where(true = (select u.boss from user u where u.user_id = ?2) and r.org_id = ?1)
or
(false = (select u.boss from user u where u.user_id = ?2) and r.created_by =?2)",
nativeQuery=true)
public Iterable<Role> findAllById(Long org_id,Long created_by );
@Query("from Users1 u where u.user_id=?2 and u.org_id = ?1")
public Users1 findUserbyOrgId(Long org_id, Long created_by);
}
角色。控制器类:
public ResponseEntity<Iterable<Role>> getAllRoles(@RequestParam("org_id") Long org_id,
@RequestParam("created_by") Long created_by ) throws Exception {
if( null != rolesRepository.findUserbyOrg(org_id, created_by)) {
Iterable<Role> Roles = rolesRepository.findAllById(org_id, created_by); }
GET Response from postman:
[
{
"roleId": 3,
"org_id": 2,
"roleName": "manager",
"createdBy": 5,
"createdOn": 1591716178419,
}
]
除了名字,我什么都有。我不知道如何在我的GET API中获取它。任何帮助都将不胜感激。
这不是对你问题的直接回答,但由于以下原因,@manytomy在实际领域通常不受鼓励。
建议的方法是
在stackoverflow和youtube中有很多这样的案例。我认为这将最终为您节省更多的时间来切换到这种方法。
当我映射同一个实体时,就像这里回答的那样: Hibernate与同一实体的多对多关联 在“tbl_friends”表中,我有相同含义的行。例如,我有id=1的用户和id=2的用户。在“tbl_friends”表中,当他们作为朋友链接时,我有两行 使用Hibernate或JPA引用是否可以在一行(1-2或2-1)中建立这种关系?
当我有用户并且他们有其他用户作为朋友时,我想让应用程序类似于facebook。因此,我创建了一个实体
问题内容: 有一个实体类“ A”。A类可能具有相同类型“ A”的子级。如果“ A”是孩子,则也应保留它的父母。 这可能吗?如果是这样,我应该如何在Entity类中映射关系?[“ A”有一个id列。] 问题答案: 是的,这是可能的。这是标准双向@ManyToOne/ @OneToMany关系的特例。之所以特别是因为关系两端的实体都是相同的。JPA 2.0规范的第2.10.2节详细介绍了一般情况。 这
本文向大家介绍MyBatis中多对多关系的映射和查询,包括了MyBatis中多对多关系的映射和查询的使用技巧和注意事项,需要的朋友参考一下 先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用中间表连接图书表和图书类别表,图书表中没有使用外键关联图书类别表 而是在中间表中引用了图书主键和类别主键 通
如果在中只有一组,这将非常好地工作。ASSESSMENT_COMMENT只有两列: 它将完美地代表一对多的关系。 现在问题来了: 那么,1)这是Hibernate中已知的bug吗?2)有办法解决这个问题吗?我可以强制Hibernate创建两个映射表,每个映射表一个吗?请记住,我不能更改类来引用(业务逻辑需求)
我正在hibernate的帮助下开发一个电子购物程序。因为我是jsp、servlet、hibernate的新手,我不知道如何使用关系表中的附加列进行多对多关系映射。我已经阅读了几篇教程,但其中大部分都是关于hibernate社区的注释映射和文档,但没有一篇适合我的情况。 我有三个表,分别是电影信息表、订单详情表和订单详情表(关系表),其中订单详情表的结构如下所示。 我正在尝试使用四个POJO类来实