Classroom班级表与Student学生表是简单的一对多的关系
public class Student {
private Integer id;
private Classroom classroom;
private String name;
/*省略get set方法*/
}
public class Classroom {
private Integer id;
private String name;
private Set<Student> students = new HashSet<Student>();
/*省略get set方法*/
}
下面是用annotation设置其双向关联的代码。
在Classroom中设置
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "classroom_id", nullable = true)
public Classroom getClassroom() {
return this.classroom;
}
在Classroom中设置
注:这里“立即加载”是故意的,因为业务特殊性所以没有考虑用“延迟加载”。
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "classroom")
public Set<Student> getStudents() {
return this.students;
}
下面是需求:
查询出班级编号最小的班级信息和此班级里所有学生信息
用criteria查询,主体代码是这样写的
Criteria criteria = session.createCriteria(Classroom.class);
criteria.addOrder(Order.asc("id"));
criteria.setMaxResults(1).uniqueResult();
此查询生成的sql语句大致如下:
select c.*, s.* from classroom c left outer join student s on c.id=s.classroomId order by classroom.id desc limit 1
所以结果是classroom的信息查询出来了,但是些班级中的学生信息只查到一个。如果classroom.getStudents()得到的是1。
看了sql语句后就找到问题原因了,都是因为left outer join连接查询惹的祸。如果能进行2次查询,每一次
select * from classroom order by id limit 1;
select * from student where student.class_id = ***
多好呀。
以前用.hbm.xml配置时有选项fetch="join/select"貌似可以实现这个功能,而annotation中却无此选项。不知这是annotation的bug,还是annotation故意不实现这个功能。
分享到:
相关推荐
【标题】"Hibernate Validator Annotation Processor 5.1.0.CR1" Hibernate Validator 是一个流行的开源验证框架,它基于JSR 303/JSR 349(Bean Validation)标准,为Java应用程序提供了强大的数据验证功能。...
在这个"annotation.rar"压缩包中,我们有两个文件:`bug.txt`和`annotation`,它们分别代表了对注解的实践应用和可能的错误记录。 1. **注解的基本概念** - 注解是一种声明式的编程元素,可以附加在源代码的类、...
早期版本AHibernate1.0下载地址:http://download.csdn.net/detail/lk_blog/4222048 本版主要修改的内容: ...注:使用混淆时最好在proguard.cfg文件添加设置:-keepattributes *Annotation* 6.其他一些bug.
2. `hibernate-validator-annotation-processor-5.0.0.CR2.jar`:这个文件是Hibernate Validator的注解处理器,它可以在编译时帮助检查和生成与验证相关的元数据,提高开发效率,并且能在早期发现潜在的错误。...
例如,`org.springframework.beans.factory.annotation.Autowired`注解用于实现依赖注入,`org.springframework.web.bind.annotation.RequestMapping`用于处理HTTP请求映射,`org.springframework.context....
JUnit4是目前广泛使用的版本,它引入了注解(Annotation)来简化测试代码,如@Test用于标记测试方法,@Before和@After用于定义在每个测试方法之前和之后执行的设置和清理操作。快速入门文档“JUnit4快速入门(已阅)....
Exporting a lazily initialized bean (which implements SelfNaming and is annotated with ManagedResource annotation) gives IllegalStateException [SPR-17592] #22124 MockHttpServletRequest changes Accept-...
19. **JPA与Hibernate**:Java持久层API(JPA)和Hibernate是ORM(对象关系映射)工具,简化了数据库操作。 20. **Java性能调优**:包括JConsole、VisualVM等工具的使用,以及对内存、CPU、GC的监控和优化。 以上...
Spring 4.3.6是Spring框架的一个稳定版本,它包含了一系列增强特性和修复的bug,为开发者提供了更强大和灵活的工具来构建基于Java的企业级应用。文档分为两部分:javadoc-api和spring-framework-reference,这两部分...
《XDoclet-Bin-1.2.3:自动化...然而,随着Java注解处理机制的发展,如Java的APT(Annotation Processing Tool)和现代构建工具Maven、Gradle的普及,XDoclet的使用逐渐减少,但它在特定时期对Java开发的贡献不容忽视。
2. 配置Spring MVC:启用JSR303验证,可以通过`<mvc:annotation-driven validation="true">` 或在配置类中启用`@EnableWebMvc`和`@InitBinder`方法。 3. 使用注解:在模型对象的字段上直接使用JSR303验证注解。 4. ...
10. **注解(Annotation)**:用于提供元数据,可以用于编译时和运行时的处理。 11. **模块系统**:Java 9引入了模块系统,增强了大型应用的组织和隔离。 12. **JavaFX**:用于构建桌面应用程序的图形用户界面。 ...