【发布时间】:2019-07-29 22:56:51
【问题描述】:
我正在构建一个需要单个登录页面的应用程序。但是,有两种“类型”的用户:客户和培训师。我的域如下所示:
User
|
+-----+-----+
| |
Person Trainer
我的用户将包含电子邮件、密码等,因此我可以使用此表来验证我的登录请求。
一个 Trainer 应该存储一个人员列表,一个人应该有 1 个 trainer。
一对多的工作,培训师可以存储 Person 类对象的列表,但我无法通过客户端链接回培训师。
这是我的用户类:
package com.example.demo.model;
import javax.persistence.*;
@Entity
@Inheritance
@Table(name="users")
public abstract class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String email;
public User(){}
public User(String email) {
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Person 类:
package com.example.demo.model;
import javax.persistence.*;
@Entity
public class Person extends User {
@Column
private int age;
@ManyToOne
@JoinColumn
private Trainer trainer;
public Person(){}
public Person(String email, int age) {
super(email);
this.age = age;
}
}
培训师课程:
package com.example.demo.model;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Trainer extends User {
@Column
private String description;
@OneToMany(mappedBy = "trainer", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Person> clients;
public Trainer(){}
public Trainer(String email, String description) {
super(email);
this.description = description;
}
public void addClient(Person person){
this.clients = new ArrayList<>();
this.clients.add(person);
}
}
我应该如何通过 ManyToOne 注释访问客户的培训师?或者还有其他选择吗? 提前致谢!
【问题讨论】:
-
“我无法通过客户端链接回培训师”是什么意思?什么客户?是什么阻止你这样做?
-
培训师的 id 没有作为外键添加到我的 postgres 数据库中的客户端实体
-
您是否在
Person中设置了对Trainer的引用?这是关系中控制保存内容的部分。 -
我确实忘记参考我的教练了!我以为它会自动映射。感谢您的帮助!
标签: spring jpa inheritance spring-data-jpa mapping