对象A
@Entity @Table(name = "td_spider_cfg") public class SpiderCfg implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String netName; private String columnUrl; private String netUrl; private String columnName; private String columnPattern; private String columnPagePattern; private int depth = 1; private int isPage ; private int isUpdateSpider; private int isRepeat; private String cron; private int threadNum = 3; private String spiderType; @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL) @JoinColumn(name="cfgId") private Set<SpiderCfgPattern> targetPatterns; }
@Entity @Table(name = "td_spider_cfg_pattern") public class SpiderCfgPattern implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String url; private String pattern; private Long cfgId; }
我在更新对象A的时候,调用的是jpa的save方法。更新操作成功。但是关联的td_spider_cfg_pattern表里面之前的数据,并没有被删除,而是被update了。查看sql。如下:
,数据库里面出现了垃圾数据。(我的本意是想把之前在)td_spider_cfg_pattern表里面的关联数据删掉,再保存,但是jpa是update set=null ,然后保存。
请问我要怎么写代码,才能是正确的。
目前保存的代码如下:
@ResponseBody @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(SpiderCfg spiderCfg, String urls) throws Exception { String columnPattern = UrlPattern.build(spiderCfg.getColumnUrl()).getPathPattern().toString(); spiderCfg.setColumnPattern(columnPattern); String[] turls = urls.split("\n"); Set<SpiderCfgPattern> set = Sets.newHashSet(); for (String url : turls) { if (StringUtils.isNotBlank(url)) { SpiderCfgPattern p = new SpiderCfgPattern(); p.setUrl(url); p.setPattern(UrlPattern.build(url).getPathPattern().toString()); set.add(p); } } spiderCfg.setTargetPatterns(set); SpiderCfg res = spiderService.saveSpiderCfg(spiderCfg); return "true"; }
求各位帮我看看。
偶然找到了,在OneToMany标签里面要加上一个orphanRemoval=true,表明删除无关联的数据。