我试着从服务中获得一个多人关系(课程-学生),并将结果传递给管理员。当我在服务中时,由于事务性注释,没有抛出懒散的初始化异常(LazyInitializationException)。但是,当我在控制器中时,会抛出懒散初始化异常(在获取课程学生时),因为会话已关闭。我如何解决此问题,而不急于获取集合
这是我的代码:
Couse Model
@Entity
@Getter
@Setter
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@ManyToMany
@JoinTable(name = "COURSES_STUDENTS",
joinColumns = {@JoinColumn(name = "COURSE_ID")},
inverseJoinColumns = {@JoinColumn(name = "STUDENT_ID")})
private Set<Student> students;
public Course() {
this.students = new HashSet<>();
}
学生模型
@Entity
@Getter
@Setter
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@ManyToMany(mappedBy = "students")
private Set<Course> courses;
public Student() {
this.courses = new HashSet<>();
}
}
课程存储库
@Repository
public interface CourseRepository extends JpaRepository<Course, Long> {
}
课程服务
@Service
public class CourseService {
private final CourseRepository courseRepository;
@Autowired
public CourseService(CourseRepository courseRepository) {
this.courseRepository = courseRepository;
}
@Transactional
public ResponseEntity<List<Course>> findAll() {
return this.courseRepository.findAll().isEmpty() ? ResponseEntity.noContent().build()
: ResponseEntity.ok(this.courseRepository.findAll());
}
}
航向控制员
@Controller
@RequestMapping("/")
public class CourseController {
private final CourseService courseService;
@Autowired
public CourseController(CourseService courseService) {
this.courseService = courseService;
}
@GetMapping
public ResponseEntity<List<Course>> index() {
return this.courseService.findAll();
}
}
应用属性
spring.datasource.url=jdbc:h2:~/database;AUTO_SERVER=TRUE
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.jpa.open-in-view=false
spring.mvc.hiddenmethod.filter.enabled=true
logging.level.org.springframework.web=DEBUG
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
提前感谢。
因此有两种方法:
这对性能不利,必须不惜一切代价避免。
总之,不要使用事务性来保持db会话打开以获取延迟集合。只需在db/dao层中加入fetch lazy集合,即可获得每个endpoint所需的数据。
如果您想在这里了解如何使用join-fetch-how-FetchType。Spring控制器中与JPA和Hibernate的惰性关联
问题内容: 我有以下控制器: 我想将绑定的ng模型传递给以下服务,该模型位于我的视图中… 如何连接控制器的作用域以传递到服务中?谢谢! 问题答案: 如何在angularjs中将范围从控制器传递到服务? 您不能将$ scope注入服务,没有像Singleton $ scope这样的东西。 我想将绑定的ng模型传递给以下服务,该模型位于我的视图中,即ng-model =“ symbol_wanted”
我有一个.NET应用程序,其中有一个用于接收用户请求的控制器,一个服务调用另一个服务。我在中有一些代码,当用户请求值不正确时,我查询数据库(DynamoDB)并得到500错误的响应。我想处理这个问题,这样我就可以捕捉到这个错误/异常,并将错误消息连同一个400状态码一起从控制器发回给用户。我应该如何修改代码来做到这一点? 这是我尝试过的。目前,我只是在中打印错误,但我需要将其发送到控制器。通过抛出
问题内容: 以下是我的html模板: 下面是我的代码: 为什么我会收到“ 未定义 ”而不是“ 某些消息 ” 下面是一个小提琴 http://jsfiddle.net/j2K7N/27/ 问题答案: 您的代码几乎是正确的,但是这里有几个问题: 在这里,您从控制器传递函数,该函数带有一个未定义的参数,该参数会导致警报消息带有“未定义”文本。我建议将HTML代码修改为: 请注意,我将传递为变量而不是函数
问题内容: 我试图创建一个服务来获取json并将其传递给我homeCtrl我可以获取数据,但是当将其传递给我的homeCtrl时,它总是返回undefined。我卡住了。 我的服务: 我的家庭控制器: 问题答案: 您应该从函数返回promise ,当它被解析后,它应该从该函数返回。 厂 同样在控制器内部,您应该调用factory函数,并在service函数解析该调用并将其分配给 码
我有一个在事务控制器中分组HTTP请求的测试计划,例如: 现在,我需要控制此类事务的请求速率,而不是单个请求。例如,我可能希望每分钟有60个事务控制器实例 有一个恒定吞吐量计时器,据我所知,它用于控制单个请求的吞吐量。例如,如果我将恒定吞吐量计时器吞吐量设置为每分钟60个,JMeter将在avg上每分钟给我60个请求,但不是每分钟给我60个事务控制器实例。 将JMeter配置为每分钟有60个事务控
问题内容: 所以我有一个控制器设置如下: 管理控制器上的“索引”视图仅列出系统中的产品,并允许我们单击产品以查看/编辑/删除该产品。真的很简单。但是,每个产品都有一个CategoryID,该ID告诉我们该产品属于哪个类别,存储在单独的表中。 (非常简化的)当前视图是这样的: 目前这很好,因为在我开发和测试该系统时,系统中只有10或15种产品,但是一旦我部署它,大约就会有。数据库中有300种产品。我