public interface BlogService {
public void save(Blog blog);
public List<Blog> findAll();
}
@Service("blogService")
public class BlogServiceImpl implements BlogService {
@Resource
private BlogDao blogDao;
@Resource
private TagDao tagDao;
public void save(Blog blog) {
blogDao.create(blog);
for (Tag tag : blog.getTags()) {
tag.setBlog(blog);
tagDao.create(tag);
}
}
public List<Blog> findAll() {
return blogDao.findAll();
}
}
最後、これらを呼び出すコードです。
Tag t1 = new Tag();
t1.setId(1);
t1.setName("NAME1");
Tag t2 = new Tag();
t2.setId(2);
t2.setName("NAME2");
Blog blog = new Blog();
blog.setContent("Test102");
Set<Tag> tags = new HashSet<Tag>();
tags.add(t1);
tags.add(t2);
blog.setTags(tags);
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BlogService service = (BlogServiceImpl) context.getBean("blogService");
service.save(blog);
for (Blog b : service.findAll()) {
System.out.println(b);
}
・ただし、getCurrentSessionを使うと以下のエラー org.springframework.orm.hibernate4.HibernateSystemException : No Session found for current thread
これは以下のようにapplicationContext.xmlを変更して、TransactionManagerをアノテーションベースとし、サービスクラスのメソッド(save/findAll)に@Transactionalを付与することで解決できました。
・次なるエラー。。。 java.lang.ClassCastException: $Proxy19 cannot be cast to <クラス名>