💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
~~~ package net.youworker.onetomany.test; import net.youworker.onetomany.domain.Customer; import net.youworker.onetomany.domain.LinkMan; import net.youworker.onetomany.repository.CustomerRepository; import net.youworker.onetomany.repository.LinkManRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Optional; import java.util.Set; @RunWith(SpringRunner.class) @SpringBootTest public class OneToManyTest { @Autowired private CustomerRepository customerRepository; @Autowired private LinkManRepository linkManRepository; /** * 保存一个客户,保存一个联系人 * 效果:客户和联系人作为独立的数据保存到数据库中 * 联系人的外键为空 * 原因? * 实体类中没有配置关系 */ @Test @Transactional //配置事务 @Rollback(value = false) public void testAdd1() { //创建客户 Customer customer = new Customer(); customer.setCustName("张三2"); //创建联系人 LinkMan linkMan = new LinkMan(); linkMan.setLkmName("王五1"); linkMan.setCustomer(customer); /** * 配置了客户到联系人的关系 * 从客户的角度上:发送两条insert语句,发送了一条更新语句更新数据库(更新外键) * * 由于我们配置了客户到联系人的关系,客户可以对外键进行维护 * * 会有一条多余的update语句 * 由于一的一方可以维护外键:会发送update语句 * 要解决此问题:只需要在一的一方放弃维护权即可 */ customer.getLinkMans().add(linkMan); // 由于配置了一的一方到的多的一方的关联关系,所以会发送一条update语句 customerRepository.save(customer); // linkManRepository.save(linkMan); System.out.println("成功!"); } /** * 保存一个客户,保存一个联系人 * 效果:客户和联系人作为独立的数据保存到数据库中 * 联系人的外键为空 * 原因? * 实体类中没有配置关系 */ @Test @Transactional //配置事务 @Rollback(value = false) public void testAdd2() { //创建客户 Customer customer = new Customer(); customer.setCustName("张三"); // customer.setCustLevel("5"); // customer.setCustId(1l); //创建联系人 LinkMan linkMan = new LinkMan(); linkMan.setLkmName("王五五"); /** * 配置联系人到客户的关系(多对一的关系) * 只发送了两个insert语句 */ linkMan.setCustomer(customer);//由于配置了多的一方到一的一方的关联关系,所以保存的时候就已经对外键赋值了 customerRepository.save(customer); linkManRepository.save(linkMan); System.out.println("成功!"); } /** * 级联添加 */ @Test @Transactional //配置事务 @Rollback(value = false) public void testCascadeAdd() { //创建客户 Customer customer = new Customer(); customer.setCustName("张三三"); customer.setCustId(1l); //创建联系人 LinkMan linkMan = new LinkMan(); linkMan.setLkmName("钱六六122"); linkMan.setCustomer(customer); customer.getLinkMans().add(linkMan); customerRepository.save(customer); } /** * 级联删除 */ @Test @Transactional //配置事务 @Rollback(value = false) //设置不自动回滚 public void testCascadeDel() { //查询1号客户 Customer customer = customerRepository.getOne(1l); //2.删除1号客户 customerRepository.delete(customer); } } ~~~