package com.allqj.calculator.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
/**
* spec多表尝试电影表实体类
*
* @author Xing
* @CREATE 2018-03-21
*/
@Entity
@Setter
@Getter
@Table(name = "movie")
public class MovieBean implements Serializable {
@Id
@GenericGenerator(name = "bb", strategy = "guid")
@GeneratedValue(generator = "bb")
@Column(name = "mid", nullable = false)
private String mid; @Column(name = "mname")
private String mname; @Column(name = "mtype")
private String mtype; @Column(name = "mfeel")
private String mfeel;
@JsonIgnoreProperties(value = { "movies" })
//@JsonIgnore
@ManyToMany(mappedBy = "movies")
private List<SuperStarBean> supers;
}
//@OneToMany(mappedBy="movies",/*targetEntity=SuperstarToMovie.class,(如果使用泛型来定义集合以指定元素类型,则不需要指定关联的目标实体类型; 否则必须指定目标实体类)*/fetch=FetchType.LAZY)
package com.allqj.calculator.entity;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import com.allqj.calculator.entity.MovieBean;
import org.hibernate.annotations.GenericGenerator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* spec多表尝试演员表实体类
*
* @author Xing
* @CREATE 2018-03-12-18:31
*/ @Entity
@Getter
@Setter
@Table(name = "superstar")
public class SuperStarBean implements Serializable {
@Id
@GenericGenerator(name = "aa", strategy = "guid")
@GeneratedValue(generator = "aa")
@Column(name = "sid", nullable = false)
private String sid; @Column(name = "name")
private String name; @Column(name = "sex")
private String sex;
@JsonIgnoreProperties(value = { "supers" })
@ManyToMany(fetch = FetchType.EAGER, cascade ={ CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE})
@JoinTable(name = "movie_superstar",
joinColumns = {
@JoinColumn(name = "sid")},
inverseJoinColumns = {
@JoinColumn(name = "mid")}) private List<MovieBean> movies; }
package com.allqj.calculator.controller;

import com.allqj.calculator.entity.MovieBean;
import com.allqj.calculator.entity.SuperStarBean;
import com.allqj.calculator.service.ZmanyService;
import com.allqj.qjf.common.controller.BaseController;
import com.allqj.qjf.common.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; /**
* spec多表尝试Controller层
*
* @author Xing
* @CREATE 2018-03-12-18:30
*/
@RestController
@RequestMapping("/tomany")
public class ZmanyController extends BaseController {
@Autowired
private ZmanyService s; @ResponseBody
//根据演员名查询信息
@RequestMapping("/superlist")
public ResultVO list(@RequestBody SuperStarBean stom) {
List<SuperStarBean> list = s.findAllbySuper(stom);
return ok(list);
} //根据电影名查询信息
@RequestMapping("/movielist")
public ResultVO list1(@RequestBody MovieBean mb) {
List<MovieBean> list1 = s.findAllbyMovie(mb);
return ok(list1);
} //删除演员信息中的某部电影關聯
@RequestMapping("/delmovie")
public ResultVO delmovie(@RequestBody String sid) {
s.delmovie(sid);
return ok();
} //刪除電影信息中的某位演員關聯
@RequestMapping("/delsuper")
public ResultVO delsuper(@RequestBody String mid) {
s.delsuper(mid);
return ok();
} //修改或添加演员
@RequestMapping("/superadd")
public ResultVO add(@RequestBody SuperStarBean superStar) {
SuperStarBean add1 = s.add(superStar);
return ok(add1);
} //修改或添加电影
@RequestMapping("/movieadd")
public ResultVO addmovie(@RequestBody MovieBean movie) {
MovieBean addm = s.addm(movie);
return ok();
} /*public boolean register(SuperStarBean supers){
MovieBean role=new MovieBean();
role.setMid((long) 2);
Set<MovieBean> roles=new HashSet<MovieBean>();
roles.add(role);
supers.setMovies(movies); ;
return userService.insert(supers);
}*/ //删除演员
@RequestMapping("/superdelAll")
public ResultVO superdelall(@RequestBody SuperStarBean superbean) {
s.superdelall(superbean);
return ok();
}
//删除电影
@RequestMapping("/moviedelAll")
public ResultVO moviedelall(@RequestBody MovieBean movieBean){
s.moviedelall(movieBean);
return ok();
}
}
package com.allqj.calculator.service;

import com.allqj.calculator.entity.MovieBean;
import com.allqj.calculator.entity.SuperStarBean; import java.util.List; public interface ZmanyService { List<MovieBean> findAllbyMovie(MovieBean mb); List<SuperStarBean> findAllbySuper(SuperStarBean stom); void delmovie(String sid); void delsuper(String mid); SuperStarBean add(SuperStarBean superStar); MovieBean addm(MovieBean movie); SuperStarBean superdelall(SuperStarBean superbean); void moviedelall(MovieBean movieBean);
}
package com.allqj.calculator.service;
import com.allqj.calculator.entity.MovieBean;
import com.allqj.calculator.entity.SuperStarBean;
import com.allqj.calculator.repository.SuperRepository;
import com.allqj.calculator.repository.ZmanyRepository;
import com.allqj.calculator.repository.ZmanyRepositoryImpl;
import com.github.wenhao.jpa.Specifications;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Range;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects; /**
* spec多表尝试Service层实现类
*
* @author Xing
* @CREATE 2018-03-12-18:32
*/
@Service
public class ZmanyServiceImpl implements ZmanyService{
@Autowired
private ZmanyRepository movieDao;
@Autowired
private SuperRepository superDao;
@Autowired
private ZmanyRepositoryImpl zmanyRepositoryImpl;
@Override
@Modifying
public List<MovieBean> findAllbyMovie(MovieBean mb) {
Specification<MovieBean> specification = new Specifications<MovieBean>()
//.between("age", new Range<>(10, 35))
//.eq(Objects.nonNull(stom.getMovies()),"movie.mname", "666")
.build();
return movieDao.findAll();
}
@Override
@Modifying
public List<SuperStarBean> findAllbySuper(SuperStarBean stom) {
Specification<SuperStarBean> specification = new Specifications<SuperStarBean>()
.between("age", new Range<>(10, 35))
.eq(Objects.nonNull(stom.getMovies()),"movie.mname", "666")
.build();
return superDao.findAll();
} @Override
public void delmovie(String sid) {
zmanyRepositoryImpl.delmovie(sid);
} @Override
public void delsuper(String mid) {
zmanyRepositoryImpl.delsuper(mid);
} @Override
public SuperStarBean add(SuperStarBean superStar) {
return superDao.save(superStar);
} @Override
public MovieBean addm(MovieBean movie) {
return movieDao.save(movie);
} @Override
public SuperStarBean superdelall(SuperStarBean superbean) {
superDao.delete(superbean);
return null;
} @Override
public void moviedelall(MovieBean movieBean) {
// movieDao.deleteByMid("1");
// zmanyRepositoryImpl.delete(movieBean);
}
}
package com.allqj.calculator.repository;

import com.allqj.calculator.entity.MovieBean;
import com.allqj.calculator.entity.SuperStarBean;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import javax.transaction.Transactional; public interface ZmanyRepository extends JpaRepository<MovieBean, Long>, JpaSpecificationExecutor<MovieBean> { }

package com.allqj.calculator.repository;
import com.allqj.calculator.entity.MovieBean;
import com.allqj.calculator.entity.SuperStarBean;
import org.springframework.stereotype.Repository;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import javax.transaction.Transactional; /**
* @author Xing
* @CREATE 2018-03-17-15:33
*/
@Repository
public class ZmanyRepositoryImpl {
@PersistenceContext
private EntityManager em;
/**
* 解除关联关系调用集合对象的remove方法
* 集合的remove方法会删除的是关联关系,也就是删除中间表的某条记录
* 但是,它不会删除实体类对应数据表中的记录
*/
//解除演員信息中與某電影的關係
@Transactional
public void delmovie(String sid){
SuperStarBean superstar = em.find(SuperStarBean.class, sid);
MovieBean item = superstar.getMovies().iterator().next();
superstar.getMovies().remove(item);
}
//解除電影信息中與某演員的關係
@Transactional
public void delsuper(String mid) {
MovieBean movie = em.find(MovieBean.class, mid);
SuperStarBean item = movie.getSupers().iterator().next();
movie.getSupers().remove(item);
}
}

JpaManytoMany的更多相关文章

随机推荐

  1. docker报错:Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

    在github上开到这样一条 于是 这两个选项换着来 具体怎么回事,咱也不知道,咱也不敢问 改完后蹭蹭的

  2. CF1157A-Reachable Numbers题解

    原题地址 题目大意:有一个函数\(f(x)\),效果是将\(x+1\)后,去掉末尾所有的\(0\),例如: \(f(599)=6\),因为\(599+1=600→60→6\) \(f(7)=8\),因 ...

  3. mysql的服务器构成

    什么是实例 这里的实例不是类产生的实例对象,而是Linux系统下的一种机制 1.MySQL的后台进程+线程+预分配的内存结构. 2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内 ...

  4. Python与微信——itchat包

    目录 itchat itchat 一安装itchat pip install itchat pip install echarts-python 二登陆并向文件传输助手发消息 import itcha ...

  5. python模拟蒙特·卡罗法计算圆周率

    蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题. 假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, ...

  6. linux下安装kubectl

    查看所有版本: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md 下载指定版本: curl -O https://dl ...

  7. python try exception finally记录

    try exception finally中,finally下的语句块始终会执行 测试finally代码 def test_try_exception(a, b): '''测试异常捕获语句''' re ...

  8. 实验二 Java面向对象程序设计 20175301李锦然实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  9. python爬虫实例项目大全

    WechatSogou [1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典. DouBanSpider [2]- ...

  10. Exp2 后门原理与实践 20164314 郭浏聿

    1.实践内容 (1)使用nc实现win,Linux间的后门连接. 热身 (2)使用netcat获取主机操作Shell,cron启动. (3)使用socat获取主机操作Shell, 任务计划启动. (4 ...