技术标签: spring spring boot # JPA java
对象导航查询:查询一个对象的同时,通过此对象聋询他的关联对象
在这里,将使用一对多里面所使用的配置进行示例
默认使用延迟加载
测试类:
package cn.yy.test;
import cn.yy.dao.ManyCustomerDao;
import cn.yy.dao.ManyLinkManDao;
import cn.yy.domain.Customer;
import cn.yy.domain.LinkMan;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import java.util.Set;
/**
* @author Marston
* @date 2021/12/5
*/
@RunWith(SpringJUnit4ClassRunner.class)//声明spring提供的单元测试环境
@ContextConfiguration(locations = "classpath:applicationContext.xml")//指定spring容器的配置信息
public class OneToManyTestQuery {
@Autowired
private ManyCustomerDao manyCustomerDao;
@Autowired
private ManyLinkManDao manyLinkManDao;
/**
* 测试对象导航查询(查询一个对象的时候,通过此对象查询所有的关联对象)
*/
@Test
@Transactional//解决java代码中报错:could not initialize proxy - no Session
public void testQuery1(){
//查询id为1的客户
Customer customer = manyCustomerDao.getOne(1l);
//对象导航查询,此客户下的所有联系人
Set<LinkMan> linkMans = customer.getLinkMans();
for (LinkMan linkMan:linkMans){
System.out.println(linkMan);
}
}
}
运行结果:
cs_linkman数据库表内容:
cst_customer数据库表中的数据
运行结果:
默认使用的是延迟加载,如果想要修改加载方式的话,想要修改实体类中的注释,在本例中,想要修改加载方式的话就需要对实体类Customer中对注释进行修改
/*
放弃外键维护权:
mappedBy:对方配置关系的属性名称
cascade :配置级联( 可以配置到设置多表的映射关系的注解上)
CascadeType.all:所有
MERGE:更新
PERSIST:保存
REMOVE:删除
fetch :配置关联对象的加载方式
EAGER : 立即加载
LAZY : 延迟加载
*/
@OneToMany(mappedBy = "customer" ,cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<LinkMan> linkMans = new HashSet<LinkMan>();
测试方法,该方法在2中的测试类中
/**
* 对象导航查询:
* 默认使用的是延迟加载的形式查询的
* 调用get方法并不会立即发送查询,而是在使用关联对象的时候才会查询,这叫做延迟加载!
*
* 修改配置,将延迟加载改为立即加载
* fetch,需要配置到多表映射关系的注解上面
*/
@Test
@Transactional//解决java代码中报错:could not initialize proxy - no Session
public void testQuery2(){
//查询id为1的客户
//之前的情况下getOne默认使用延迟加载的方式,findOne是使用立即加载的方式进行查询
//但是在对象查询中,默认使用的都是延迟加载方式
Customer customer = manyCustomerDao.findOne(1l);
//对象导航查询,此客户下的所有联系人
Set<LinkMan> linkMans = customer.getLinkMans();//默认是延迟加载,调用
System.out.println(linkMans);
for (LinkMan linkMan:linkMans){
System.out.println(linkMan);
}
}
运行结果:
默认使用立即加载
测试方法,该方法在2中的测试类中
/**
* 从联系人对象导航查询他的所属客户
* 从多的一方去查询少的一方:默认使用立即加载
* 使用配置修改需要找到查询主体:在这里是联系人,与之前的fetch使用方法一样,修改其属性便可以修改加载方式
*/
@Test
@Transactional//解决java代码中报错:could not initialize proxy - no Session
public void testQuery3(){
//查询id为1的客户
LinkMan linkMan = manyLinkManDao.findOne(2l);
//对象导航查询所属用户
Customer customer = linkMan.getCustomer();
System.out.println(customer);
}
对于对象导航查询来说:
从一方查询多方
- 默认:使用延迟加载
- 关联对象是一个集合,集合便说明里面可能有许多数据,如果不需要使用所有的数据,就会照成极大的浪费效率,所以需要使用延迟加载
从多方查询一方
- 默认:使用立即加载
- 只是需要查询一个数据,所以使用立即加载
文章浏览阅读310次。鸿蒙2.0系统现在是比较的火的,那么这个系统它怎么样呢?鸿蒙2.0这款系统是来自哪家品牌呢?相信很多小伙伴会有这样的疑问吧。那么我们就一起来了解一下吧。1.鸿蒙2.0系统是什么官方介绍“鸿蒙系统(HongmengOS)是一款“面向未来”的操作系统,一款基于微内核的面向全场景的分布式操作系统,现已适配智慧屏,未来它将适配手机、平板、电脑、智能汽车、可穿戴设备等多终端设备“。可以看到这是一场大的布局,..._什么是鸿蒙2.0
文章浏览阅读293次。Java面试笔试面经、Java技术每天学习一点Java面试关注不迷路作者:莫那·鲁道来源:http://thinkinjava.cn/前言随着业务发展越来越快,数据量越来越多,用户也越来..._异地存活java
文章浏览阅读896次,点赞3次,收藏4次。一、根据友盟官网的介绍引入依赖dependencies { implementation fileTree(include:['*.jar'], dir:'libs') // 下面各SDK根据宿主App是否使用相关业务按需引入。 // 友盟统计SDK implementation 'com.umeng.umsdk:common:9.4.7'// 必选 implementation 'com.umeng.umsdk:asms:1.4.1'// 必选 _apk文件中友盟appkey
文章浏览阅读4.2k次,点赞17次,收藏37次。目录1 前言2 交叉熵的实现过程3完整的自定义交叉熵4.使用自己one-hot的交叉熵1 前言楼主最近要修改一下one-hot然后送入交叉熵中,由于pytorch的torch.nn.CrossEntropyLoss()已经封装好了one-hot,所以需要自定义重写交叉熵,这里主要是多级交叉熵,而不是二分类交叉熵。2 交叉熵的实现过程首先看多级交叉熵的计算过程:L=−1N∑iN∑c=1Myiclog(pic)L = -\frac{1}{N}\displaystyle\sum_i^N\display_torch cross_entropy onehot
文章浏览阅读890次。Android O对应用在后台运行时可以执行的操作施加了限制,称为后台执行限制(Background Execution Limits),这可以大大减少应用的内存使用和耗电量,提高用户体验。后台执行限制分为两个部分:后台服务限制(Background Service Limitations)、广播限制(BroadcastLimitations)。后台服务限制如何才算是后台应用?除了下面情况外都是后..._android 后台数据 多长时间生效
文章浏览阅读9.6k次。转载自:http://blog.csdn.net/lilanfeng1991/article/details/361857391.广义线性模型和glm()函数广义线性模型扩展了线性模型的框架,它包含了非正态因变量的分析。广义线性模型通过拟合响应变量的条件均值的一个函数(不是响应变量的条件均值),假设响应变量服从指数分布族中的某个分布(并不仅限于正态分布),极大地扩展了标_lrm在r代码
文章浏览阅读5.5k次。1.0cordova-plugin-contacts 联系人,新增,联系人,拨打电话cordova plugin add cordova-plugin-contacts详细:cordova-plugin-contacts联系人操作_天马3798的博客-程序员宅基地_cordova 联系人1.cordova-plugin-themeablebrowsercordova plugin add cordova-plugin-themeablebrowser详细使用:cordova-p..._cordova-plugin-magnetometer
文章浏览阅读1.1k次。JD-GUI 是一款开源的 Java 反编译工具,支持Windows和苹果Mac OS。以反编译和分析Java 5“字节码”及更高版本,它显示“ .class”文件的Java源代码。可以使用JD-GUI浏览重建的源代码,以立即访问方法和字段。 JD-Eclipse是Eclipse平台的插件。它允许您在调试过程中显示所有Java源代码,即使您没有全部源代码也是如此。..._jd-gui官网
文章浏览阅读1.2k次。Android的OTA升级包中,里面有一个升级脚本,该脚本会检测recovey镜像的编译时间和OTA包的编译时间,如果recovey比OTA包的时间要新的话,升级便会失败。方法一:直接屏蔽比较函数,到build/tools/releasetools/ota_from_target_files这个脚本,注释掉函数 script.AssertOlderBuild(ts, ts_text)调用,这样编译..._android ota 升级不对比时间戳
文章浏览阅读3.6k次,点赞3次,收藏22次。图片转Base64数据 m_imagePath = QFileDialog::getOpenFileName(this, tr("select image"), "./pic/", tr("Image Files(*.jpeg *.jpg *.png *.bmp *.pgm *.pbm);;All(*.*)")); //选择图片 ui->imageDataPath->setText(m_qt base64转图片
文章浏览阅读1k次。MySQL 存储过程_mysql中的in查询
文章浏览阅读7.4k次。安装完Ubuntu20.04后,重启,只有一个下划线在左上角闪烁。或者有一个grub引导命令。_ubuntu安装后无法启动