- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 hibernate orm 填充数据库,并且无法传递多个对象。
我尝试在对象集合中使用级联合并,从oneToMany重新组织到manyToMany关系,但似乎问题与hibernate无关......
我有几个实体:
类(class).class
@Data
@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
@Table(name = "course", catalog = "course_application")
public class Course {
private static final int MAX_COURSES_PER_STUDENT = 3;
private static final int MODULES_PER_COURSE = 10;
private @Id
@GeneratedValue
Long id;
private @Version
int version;
@NotNull
private String name;
@NotNull
private int number;
private float cost;
private int modules;
@ManyToMany
@JoinTable(name = "course_listeners",
joinColumns = @JoinColumn(name = "course_id"),
inverseJoinColumns = @JoinColumn(name = "listener_id")
)
private List<Student> participators = new ArrayList<Student>();
public Course() {
}
public Course(String name, int number, float cost) {
this.name = name;
this.number = number;
this.cost = cost;
}
public void addParticipator(Student student) {
participators.add(student);
}
public void addParticipator(Collection<Student> students) {
participators.addAll(students);
}
@Override
public String toString() {
return name;
}
public String getName() {
return name;
}
public void fill(Course course) {
this.version++;
this.name = course.getName();
this.modules = course.getModules();
this.number = course.getNumber();
}
}
学生.类(class)
@Data
@Entity
@Table(name = "students", catalog = "course_application")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Student {
@ManyToMany(targetEntity = CourseProgress.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "students_progress",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "progress_id")
)
private final List<CourseProgress> progressList = new ArrayList<CourseProgress>();
private @Id
@GeneratedValue
@Column(name = "student_id")
Long id;
private @Version
int version;
@NotNull
private String name;
private String address;
private String phone;
private Integer gradeBook;
private float averageProgress;
@Embedded
private Advance advance;
@ManyToMany(mappedBy = "participators")
private List<Course> courses = new ArrayList<Course>();
public Student() {
}
public Student(String name, String address, String phone, Integer gradeBook) {
this.name = name;
this.address = address;
this.phone = phone;
this.gradeBook = gradeBook;
}
@PostConstruct
private void fillGradebookNumber() {
gradeBook = gradeBook + Math.toIntExact(id);
}
@Override
public String toString() {
return getName();
}
public void addCourseProgress(CourseProgress progress) {
progressList.add(progress);
}
public void fill(Student copy) {
this.version++;
this.name = copy.getName();
this.phone = copy.getPhone();
this.address = copy.getAddress();
this.averageProgress = copy.getAverageProgress();
this.gradeBook = copy.getGradeBook();
}
}
CourseProgress.class
@Data
@Entity
@Table(name = "progress")
public class CourseProgress {
@ElementCollection
@CollectionTable(name = "marks", joinColumns = @JoinColumn(name = "progress_id"))
@Column(name = "mark")
private final List<Integer> marks = new ArrayList<Integer>();
private @Id
@GeneratedValue
Long id;
private @Version
int version;
private String name;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
private Course course;
@Column(name = "average", columnDefinition = "Decimal(6,1)")
private double average = 0.00;
private int finalMark;
public CourseProgress() {
}
public void addMark(Integer mark) {
marks.add(mark);
refreshAverage();
}
public void addMark(List<Integer> fewMarks) {
marks.addAll(fewMarks);
refreshAverage();
}
public void refreshAverage() {
List onlyMarks = marks.stream().collect(Collectors.toList());
IntSummaryStatistics stats = onlyMarks.stream().mapToInt((mark) -> (int) mark).summaryStatistics();
average = stats.getAverage();
}
@Override
public String toString() {
return course.toString();
}
}
我正在使用 CommandLineRunner 类填充数据库:
@Slf4j
@Configuration
public class LoadDatabase {
@Bean
CommandLineRunner populateDatabase(
StudentRepository studentRepository,
CourseRepository courseRepository,
CourseProgressRepository progressRepository,
ExchangeFileRepository exchangeFileRepository) {
return args -> {
log.info("Загружаем учащихся");
Student studentIvanov = new Student(
"Иванов Иван Иванович",
"100200, Россия, г. Москва, ул. Вознесенская, 15 / ф",
"+7(978)111-22-33",
1000121);
Student studentJackson = new Student(
"Бобби Джэксон Младший",
"100200, Россия, г. Москва, ул. Провансальная, 22 / 11",
"+7(978)111-22-33",
1000122);
Student studentCarlson = new Student(
"Сэмми Смит Карлсон",
"100200, Россия, г. Москва, ул. Ленинская, 8а",
"+7(978)222-33-44",
1000123);
Student studentHarris = new Student(
"Гарри Дэйл Харрисон",
"100200, Россия, г. Москва, ул. Оборонная, 127a / 1",
"+7(978)333-44-55",
1000124);
Student studentGomez = new Student(
"Линдси Джэфферсон Гомез",
"100200, Россия, г. Москва, ул. Суздальская, 200 / 112",
"+7(978)555-66-77",
1000125);
Student studentParker = new Student(
"Рэйчел Джэксон Паркер",
"100200, Россия, г. Москва, Флотский переулок, 1",
"+7(978)666-77-88",
1000126);
log.info("Загружаем базовые курсы для студентов...");
Course chemistryCourse = new Course("Химия для учеников старших классов и студентов", 202554110, 22000f);
Course physicsCourse = new Course("Углубленный курс физики", 100292910, 25000f);
Course programmingCourse = new Course("Общий кура подготовки программиста на языке Java Core.", 300235650, 30000f);
CourseProgress ivanovJavaProgress = new CourseProgress();
ivanovJavaProgress.setName("Курс программирования Java");
ivanovJavaProgress.setCourse(programmingCourse);
studentIvanov.addCourseProgress(ivanovJavaProgress);
programmingCourse.addParticipator(studentIvanov);
ivanovJavaProgress.addMark(Arrays.asList(5, 4, 4, 5, 4, 5));
CourseProgress ivanovChemProgress = new CourseProgress();
ivanovChemProgress.setName("Подготовительные курсы по химии");
ivanovChemProgress.setCourse(chemistryCourse);
studentIvanov.addCourseProgress(ivanovChemProgress);
chemistryCourse.addParticipator(studentIvanov);
ivanovChemProgress.addMark(Arrays.asList(2, 3, 2, 4, 5, 3));
studentRepository.save(studentIvanov);
CourseProgress jacksonJavaProgress = new CourseProgress();
jacksonJavaProgress.setName("Курс программирования Java");
jacksonJavaProgress.setCourse(programmingCourse);
studentJackson.addCourseProgress(jacksonJavaProgress);
programmingCourse.addParticipator(studentJackson);
jacksonJavaProgress.addMark(Arrays.asList(5, 5, 5, 5, 4, 5));
studentRepository.save(studentJackson);
log.info("Загружаем тестовый экспортный фаайл" + exchangeFileRepository.save(
new ExchangeFile("D:\\export_json_31-03-2019_20_12_58.json", Long.valueOf(1846))));
studentRepository.save(studentCarlson);
studentRepository.save(studentHarris);
studentRepository.save(studentGomez);
studentRepository.save(studentParker);
};
}
}
studentRepository.save(studentIvanov);
工作出色并正确填充,但下一个持久对象
studentRepository.save(studentJackson);
因异常而失败
我希望每次使用 orm 保存对象时我的代码实现都能正常工作。
最佳答案
尝试在保存 Student 实体的类或方法级别添加 @Transactional 注释。
关于java - 如何修复 "org.hibernate.PersistentObjectException: detached entity passed to persist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56017458/
在 Spring-MVC 应用程序中,我尝试使用 validator 。我将注释 @NotEmpty 和 @Email 放在我的实体之一上,当我尝试验证它时,出现此错误: java.lang.NoSu
网络是我硕士学位的最后一门类(class)。我确实有一个关于如何计算非持久、持久和持久流水线的 http 往返时间的问题。 在花了无数小时阅读有关该问题、从其他大学下载笔记甚至搜索 youtube 视
让我们考虑典型的 订购 和 订单商品 例子。假设 订单商品 是 的一部分订购 聚合,只能通过订单添加。所以,添加一个新的 订单商品 到 订购,我们必须通过 Repository 加载整个 Aggreg
// lookup existing user & set a currently null child entity (ContactInfo) user.setContactInfo(contac
我正在尝试关注 this tutorial .我想我不是从使用可下载项目开始,而是从我之前做过的一个简单的“spring MVC - Maven - eclipse”项目开始。这个项目运行良好。 因此
我正在使用打开 Kubernetes 选项的 docker 应用程序运行 mac OSX Catalina。我使用以下 yaml 和命令创建了一个 PersistentVolume。 apiVersi
假设我有一个类 Employee和一个类Company其中包含 Employee 的 LinkedList对象,我想编写一个添加 Employee 的方法到特定的数据库Company 。我创建了一个新
我实际上正在将我们应用程序的所有组件更新到最新版本。因此,除其他外,我将从 eclipselink-2.5.0 升级到 eclipselink-2.7.3,并从 Tomcat 7 升级到 TomEE。
我试图遵循《用GlassFish 3开始Java EE 6平台》一书第2章中的示例。我正在Windows中使用cmd中的EclipseLink,Derby和Maven。我真的不知道这一点,将不胜感激!
我只是看看ClassGuard (虽然我知道一些 objection )。 但是我得到了 javax.persistence.PersistenceException: [PersistenceUni
我的印象是,如果我们使用持久字段,就不需要 getter 方法,因为实体管理器直接引用实例变量。但是,当我从实体中删除 getter 和 setter 方法以具有持久字段时,未从数据库中检索到相应实例
我正在 Eclipse 中使用 Servlet、JPA、EJB 和 JBoss 进行项目。正如您在我的主题标题中看到的,我的 persistence.xml 文件有错误,但我不知道是哪个:
我已经尝试了一个星期或更长时间来让我的状态在 react native Android 应用程序中持续存在,但在重新水化后状态始终具有初始值。如果我使用 Redux devtools 检查 ASync
什么时候应该坚持,什么时候应该补充水分?命名约定非常困惑,因为作者几乎没有提到它们在 redux-persist 的上下文中的含义。 . 最佳答案 在不真正了解图书馆的情况下: persist = 将
我正在尝试按照老师文档中提供的信息设置一个简单的 jpa 2.0 项目。我已经处理这个问题好几个小时了,但无论我做什么,当我尝试创建 EntityManagerFactory 时,我总是遇到这个异常:
我有一个 Maven 项目,我将其转换为现在可与 Maven 一起使用的 JPA 项目。我的persistence.xml如下: My Persistence Unit
我正在使用 Netbeans 6.8 并构建简单的 Maven Web 应用程序项目。 为持久实体创建实体和主文件 [也创建持久单元] 并使用 EclipsLink。 但是当我运行主文件时出现这个错误
我是 Kubernetes 的新手,我很难理解 Kubernetes 中持久存储背后的整个想法。 这就足够了吗,或者我必须创建持久卷,如果我只部署这两个对象而不创建 PV 会发生什么情况? 存储应该在
我正在尝试使用 JPA 为我目前参与的 Java-EE 项目设置持久性,并且我遇到了许多配置问题。目前,我已经在 persistence.xml 中定义了一个 RESOURCE_LOCAL 持久性单元
Akka 持久性查询通过提供一个通用的基于异步流的查询接口(interface)来补充 Persistence,各种日志插件可以实现该接口(interface)以公开它们的查询功能。 这是来自 akk
我是一名优秀的程序员,十分优秀!