当前位置: 首页 > 知识库问答 >
问题:

Java Spring JPA 关系@OneToMany,内部第三列

汤枫
2023-03-14

我在java中有两个实体(学生和组),具有@OneTo许多关系

public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name="name")
private Integer groupName;

public Group(Integer groupName) {
    this.groupName = groupName;
}

@OneToMany
@JoinTable(name = "groups_students",
        joinColumns= @JoinColumn(name = "group_id"),
        inverseJoinColumns = @JoinColumn(name = "student_id")
)
private Set<Student> students;
}   

我在本地主机上的表< code>groups_students中有第三列< code>date。< code>date不是类中的字段。我需要在< code>@Query中得到这个。任何人可以请帮助我如何能得到这一点(也许给这个<代码>日期 列或任何其他方式的代码信息)

public class Student {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name="first_name")
private String firstName;

@Column(name="last_name")
private String lastName;

public Student(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}
}

共有1个答案

鱼宜
2023-03-14

处理联接表中其他属性的方法是将其定义为单独的实体,然后使用中间实体拆分关系

@Entity
@Table(name = "groups_students")
public class GroupStudent {

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    private Group group;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    private Student student;

    @Column(name = "date")
    private Date date;

    //getter-setter
}

现在修改实体上的关系

@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();

并修改< code >学生实体关系

@OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();

现在,如果您想查询其他属性(如<code>date</code>),可以使用类似这样的JPQL(例如,如果您想要获取日期在过去的组的所有学生)

@Query(SELECT s FROM Student s JOIN s.groupStudents gs WHERE gs.group = :group and gs.date < CURRENT_DATE)
 类似资料:
  • 我有三个班,站点,GoupIP和IP 一个站点有一个或多个抱怨。GroupIP有一个或多个IP。 代码如下: 地点 群居 IP 在GroupIp课堂上,我得到: 在属性“ips”中,“映射者”值“groupip”无法解析为目标实体上的属性。 我的代码出了什么问题??

  • 常用数据库类型: 关系型数据库(以 MySQL、Postgresql为代表) 文档数据库 (以 MongoDB 为代表) 在我们开发的 Web 应用程序或者,系统的应用程序里面存储的一些数据都是存在一定的关联关系的,比如说用户做出了一些操作,我们需要知道是谁发起了这些操作,所以在日志记录表里面会有一个操作发起人,也就是记录下当前用户的唯一 Id 值,这是为了让一切都有迹可循,当出现各种事故的时候,

  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系

  • 我正在使用Ebean和Play 2框架,并得到两个模型:用户模型和图书模型。用户模型与图书模型以一对多关系连接。所以每个用户可以有很多书或者根本没有书。图书模式本身也有其特性。现在我想在用户模型中创建一个查询,它只返回用户,这些用户拥有具有某些属性的书籍。例如:一个属性可能是条件,如新建或使用。现在给我所有有新条件的书的用户。是否可以使用Ebean方法创建这样的查询?还是我必须使用原始SQL?

  • 进入内核入口点之前最后的准备工作 这是 Linux 内核初始化过程的第三部分。在上一个部分 中我们接触到了初期中断和异常处理,而在这个部分中我们要继续看一看 Linux 内核的初始化过程。在之后的章节我们将会关注“内核入口点”—— init/main.c 文件中的start_kernel 函数。没错,从技术上说这并不是内核的入口点,只是不依赖于特定架构的通用内核代码的开始。不过,在我们调用 sta

  • 我试图创建一个包含问题的SQL关系,每个问题可以有一个或多个备选项,但当我从REST API调用它时,看看发生了什么:REST调用 以下是我的问题和备选模式: 模型