【发布时间】:2014-08-21 07:37:51
【问题描述】:
我有类似这样的实体..
@Entity
@Table(name = "FIRST_ENTITY")
class FirstEntity
{
private static final Long serialVersionUid=1L;
@Id
@GeneratedValue
private Long id;
@Column(name="MESSAGE",nullable=false)
private String message;
}
还有一个用于此的 dao 类..
@Repository("myFirstDao")
class FirstDaoImpl implements FirstDao
{
@PersistenceContext(unitName="myUnit")
EntityManager em;
public FirstEntity save(FirstEntity entity)
{
return em.merge(entity);
}
}
以及服务类。
@Service("myFirstService")
public class MyFirstServiceImpl implements MyFirstService
{
@Resource(name="myFirstDao")
MyFirstDao myFirstDao;
public FirstEntity save(FirstEntity entity)
{
return myFirstDao.save(entity);
}
}
注意:实体管理器是容器管理的。
当我试图在另一个服务类中做这样的事情时..
@Service("anotherService")
public class AnotherServiceImpl
{
@Resource(name="myFirstService")
FirstService firstService;
public void myMeth()
{
FirstEntity f=new FirstEntity();
f.setMessage("Hello");
FirstEntity f1=firstService.save(f);
System.out.println("The generated id is "+f1);
}
}
在这里,我得到了生成的 id,但实体没有存储到数据库中。
当我在FirstDaoImpl - save()中尝试这样做时@
em.getTransaction().begin();
em.save(entity);
em.getTransaction().commit();
我收到以下错误:Cannot call getTransaction() on a container managed bean
当我做这样的事情时..
em.save(entity);
em.flush();
我收到,没有交易正在进行错误。
我想知道,我该如何解决。提前致谢。希望您尽快回复。
【问题讨论】: