我有3个实体-
>
课程
组件
时间线课程是一个独立的实体,具有以下属性:课程-(id Integer主键,Course_name)
@ Id @ Column(name = " Id ")Integer courseId;@Column(name = "course_name ")字符串course _ name;
接下来是另一个实体模块,模块中的每一行都与一门课程相关,因此模块和课程之间存在一对一的关系。模块-(Module_id、Module_name、Module_type、duration)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "module_id")
Integer module_id;
@Column(name = "module_name")
String module_name;
@Column(name = "duration")
Integer duration;
@ManyToOne
@JoinColumn(name="timeline_id", nullable=false)
private Timeline timeline;
现在,下一步是一个时间线实体,它也与课程相关,即每个时间线ID都属于一个课程ID,但是一个时间线ID可以属于多个module_ids,因此下面的代码:
@Id
@Column(name = "timeline_id")
Integer timelineId;
@OneToMany( mappedBy = "timeline" )
private List<Module> module;
@OneToOne( cascade = CascadeType.ALL)
private Course course;
你能告诉我这里的错误是什么吗。模块存储:
@Repository
public interface ModuleRepository extends JpaRepository<Module, Integer>{
public List<Module> findAllByTimelineTimelineId(Integer timelineId);
}
IModuleService
public interface IModuleService {
public List<Module> findByTimelineId(Integer timelineId);
}
ModuleServiceImpl
public List<Module> findByTimelineId(Integer timelineId) {
// TODO Auto-generated method stub
return moduleRepo.findAllByTimelineTimelineId(timelineId);
}
控制器
@RequestMapping("/gettimeline/{timeline_id}")
public List<Module> findByTimelineId(@PathVariable Integer timeline_id){
return moduleService.findByTimelineId(timeline_id);
}
现在,当我在邮递员中运行此网址时:http://localhost:8083/gettimeline/1
我得到了一个无限循环,我无法解码错误,也有OneTo火映射的任何问题,我是JPA新手:
[{"module_id":1,"module_name":"Sleep","duration":10,"timeline":{"timelineId":1,"module":[{"module_id":1,"module_name":"Sleep","duration":10,"timeline":{"timelineId":1,"module":[{"module_id":1,"module_name":"Sleep","duration":10,"timeline":{"timelineId":1,"module":[{"module_id":1,"module_name":"Sleep","duration":10,"timeline":{"timelineId":1,"module":[{"module_id":1,"module_name":"Sleep","duration":10,"timeline":{"timelineId":1,"module":[
请帮忙,提前谢谢你:)
无限循环问题是由一对多关系引起的。有几种方法可以解决这个问题,但是我发现如下所示的视图模型类是最干净的方法。
请注意,一对多关系的拥有方没有包含在下面的代码中,只有多对一关系。这可以反过来做,但是从你的代码来看,我猜这就是你想要的。
TimelineVM类
package no.mycompany.myapp.misc;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class TimelineVM {
private Integer timelineId;
public TimelineVM(Timeline timeline) {
this.timelineId = timeline.getTimelineId();
}
}
ModuleVM类
package no.mycompany.myapp.misc;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class ModuleVM {
private Integer module_id;
private String module_name;
private Integer duration;
private TimelineVM timeline;
public ModuleVM(Module module) {
this.module_id = module.getModule_id();
this.module_name = module.getModule_name();
this.duration = module.getDuration();
this.timeline = new TimelineVM(module.getTimeline());
}
}
控制器方法
@RequestMapping("/gettimeline/{timeline_id}")
public List<ModuleVM> findByTimelineId(@PathVariable Integer timeline_id){
return moduleService.findByTimelineId(timeline_id).stream().map(ModuleVM::new).collect(Collectors.toList());
}
我正在做一个小的测试项目,将数据持久化到一个简单的数据库中。我在设置数据实体时遇到了困惑和问题,需要一些帮助。 我将此开发为Spring Boot Java项目,并使用JPA实现持久性功能。我对JPA不是很熟悉。 考虑以下模拟模式: 任务: 任务说明: 状态更改历史: 我不确定注释和构造这些类以促进这种安排的正确方法。我也不确定其中一些关系本质上应该是单向的还是双向的。我看过关于建立单向和双向关系
如何返回与JPA中的父级有关系的实体列表? 我有一个用户实体,在名为的属性上有@OneToMany映射。子实体为Pet类型。这只是一种单向关系。 如何在JPA中编写返回给定用户的所有宠物的连接?
我试图创建一个注册用户的功能。 我遵循了这篇文章中的建议:将空作为id保存,并Hibernate,但解决方案对我不起作用。这是我的用户类 这是我的账户类 我的日志显示了以下输出
我与以下实体类有一个双向的一对多关系: 当然,所有必需的级联选项都是在客户端设置的。但如果在引用现有产品订单时首次持久化新创建的客户端(如本场景所示),则它将不起作用: 已创建并持久化产品订单“%1”。工作正常。 已创建客户端“%2”,并将产品订单“%1”添加到其产品订单列表中。然后它被持久化。不起作用。 我尝试了几个apporach,但没有一个显示出预期的结果。请参阅下面的结果。我在这里阅读了所
我知道类似的问题,但它们是在Hibernate的范围内被问到和回答的。我也有同样的问题,但我正在使用Eclipselink,想知道对于Hibernate,是否有更好的或替代的解决方案。 简单地回顾一下这个问题: 我有两个相互继承的类: 现在我想把一个孩子变成父母,或者反过来。 我希望现在p的数据库行是。 另一种方法是这样的: 在这种情况下,我希望与一起保存,并丢失的值。 然而,上面所描述的并不奏效
我从我的Spring项目中删除了Spring Roo,这是不必要的,而且在eclipse STS中构建花了很多时间。我执行了一个推入,我的实体对象现在包含了旧的Roo文件的源代码。 几乎没有什么变化,包括PersistentContext管理,这看起来很奇怪。事实上,我注意到,每次创建查询时,我都需要实例化实体类以获得EntityManager? 在我的实体类中,我有