我正试图阻止我的关系重新开始。我尝试了多种方法来解决这个问题,但似乎每次都有一个错误。例如,当我尝试以下代码时:
//other variables
@OneToMany(fetch = FetchType.LAZY ,cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private List<User> users= new ArrayList<>();
我得到以下错误:
Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`eb322`.`#sql-3140_2e7`, CONSTRAINT `FK20sqpkpotyyf5wx4jfmp519lu` FOREIGN KEY (`user_id`) REFERENCES `year` (`year_id`))
我已经检查了数据库中的所有表和索引,但在任何地方都找不到此约束。我该如何移除它。我基本上希望我的模式是这样的:
如果我不添加连接列,我只是得到另一个表说
我如何将这些结合在一起。
这是我的学生课,以防万一这里出了什么问题:
public class Student{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private int User_id;
}
如何将数据添加到年表中
//get data about student
Student s = ssrepo.findByName(name);
Year y = yyrepo.findByYear(year);
List<Student> students = y.getStudents();
students.add(s);
yyrepo.save(y)
有两种方法可以做到这一点。第一种是双向的。在这两个实体中进行映射。这里是这个链接(https://dzone.com/articles/introduction-to-spring-data-jpa-part-4-bidirection)哈瓦举例。
public class MyClass {
@OneToMany(mappedBy = "myClass", fetch = FetchType.LAZY,
cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "user_id")
private List<User> users;
}
地图显示是说谁是关系中的主导者。在这种情况下,MyClass具有最强的关系。
public class Student{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private int id;
@ManyToOne
@JoinColumn(name = "user_id")
private MyClass myClass;
}
我认为这是最好的方法,因为她的现实在两个实体中都很明显。有一种方法可以用单向的方式来做。在link中的例子(如何在JPA中定义单向OneTo很多关系)
你似乎在使用单向的一对一关系
Hibernate使用关联表映射关系,因此当您删除@JoinColumn注释时,将创建一个关联表。
由于年与学生有一对多的关系,列表的类型应该是列表
@OneToMany(fetch = FetchType.LAZY ,cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private List<Student> users= new ArrayList<>();
由于性能问题,通常不建议使用OneToMany单向关联。可以考虑使用双向关联。它将是如下的东西
public class Year {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "YEAR_ID")
private Long id;
@Column(name = "TYPE_ID")
private Long typeId
@Column(name = "TYPE")
private Boolean type // 1 or 0 to know if typeId is of student or teacher
@Column(name = "YEAR")
private Date year
@OneToMany(mappedBy="typeId", fetch = FetchType.LAZY ,cascade = CascadeType.ALL)
private List<Student> students;
@OneToMany(mappedBy="typeId", fetch = FetchType.LAZY ,cascade = CascadeType.ALL)
private List<Teacher> teachers;
}
public class Teacher{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "TEACHER_ID")
private Long id;
@ManyToOne
@JoinColumn(name="TYPE_ID", nullable=false)
private Year typeId;
}
public class Student{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "STUDENT_ID")
private Long id;
@ManyToOne
@JoinColumn(name="TYPE_ID", nullable=false)
private Year typeId;
}
本文向大家介绍Django 创建具有关系的模型,包括了Django 创建具有关系的模型的使用技巧和注意事项,需要的朋友参考一下 示例 多对一关系 最通用的选项。可以在您想要代表任何关系的任何地方使用 多对多关系 在内部,这是通过另一个表表示的。并ManyToManyField应放在将在表单上进行编辑的模型上。例如:Appointment将具有ManyToManyField被叫Customer,Pi
我需要创建一个新的A类节点,它与User节点有关系: 现在,假设我们有新节点A的以下数据: 我试图创建节点A,使新节点A与具有“id”:4和“nodeId”:“0002-0002”(唯一节点标识符)的用户的(现有)节点之间具有关系,但用户节点将字段“name”和“firstName”更新为。 我正在使用GraphRespository代理创建它: 有没有办法不进行此更新,只与用户节点建立关系?
问题内容: 假设我有两个表:Store和Product。我希望我的商店有产品清单。我怎样才能做到这一点? 我开始这样的事情,但是我不知道该如何完成,你们能帮我吗? 问题答案: 多对一(产品只能有一家商店) 多对多(产品可以在许多商店中使用)
假设我在前面有一个表单,它有常用的字段和下拉列表。在这些下拉列表中,用户可以选择一个选项,并且每个选项都链接到Spring data JPA中的一个实体; 下拉列表包含一些标签和对应实体的链接作为值。然后,这个值在POST-request中传递给我们希望创建的实体的PagingAndSorting存储库。 假设它是一个具有username的用户,并且他必须与其中一个办公室(也是一个实体)关联: 我
我正在使用Spring MVC/Security/JPA/Hibernate开发一个web应用程序。 我有一个用户类,它与UserRole有一个omany关系。 UserRole类与用户之间有很多关系。 用户存储库界面非常简单。 当我使用下面的代码片段使用存储库加载用户信息时,它会很好地检索用户和用户角色数据。 这是日志文件。 然而,问题出在这里。 如果我使用UserRepository的save
我尝试用Spring Boot Jpa自动创建表,但它不起作用,它不执行任何sql查询。我怀疑这是由于一个人或多个人的关系。我查了一下网站,但没能找到一个有类似问题的问题。Spring不执行任何查询和创建任何表。 用户可以创建很多帖子,每个帖子都有很多评论等等。 post.java 注释.java topic.java 我错在哪里?谢谢你!