多对多

@RequestMapping(value="/addBook",method = RequestMethod.GET)
	public String addBook(){
    	Property property = new Property();
    	property.setSortCode("1-1");
    	property.setName("property1");
    	propertyService.save(property);
    	
    	Book book = new Book();
    	book.setName("book1");
    	Set<Property> properties = Sets.newHashSet();
    	properties.add(property);
    	book.setProperties(properties);
    	bookService.save(book);
		return null;
	}
    
    @RequestMapping(value="/deleteBookProperty",method = RequestMethod.GET)
	public String deleteBookProperty(){
    	//根据propertyId来查找所有的有此Property的Book
    	long propertyId = 10;
    	Property property = propertyService.findById(propertyId);
    	DetachedCriteria criteria = DetachedCriteria.forClass(Book.class);
		criteria.createAlias("properties","properties")
		.add(Restrictions.like("properties.sortCode",property.getSortCode(),MatchMode.ANYWHERE));
		List<Book> books = bookService.parsel(criteria);
		
		for(Book book : books){
			if(book.getProperties().contains(property)){
				book.getProperties().remove(property);
			}
			bookService.update(book);
		}
		propertyService.delete(propertyId);
		return null;
	}


上面这种方式感觉还是不好,需要完善。

多对多删除:

book和property之间的关系是多对多。property是关系维护端。

现在如果得到一个propertyId,需要将这个property给删除掉。但是由于book和property之间存在多对多关系,如果一个book里面的properties包含了property,那么删除会报错。

这个时候需要将book全部找出,然后book remove 该property,再删除。

你可能感兴趣的:(多对多)