gpt4 book ai didi

java - em.merge() 没有保存到数据库

转载 作者:行者123 更新时间:2023-11-29 03:19:33 26 4
gpt4 key购买 nike

我有这样的实体..

@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();

我收到以下错误:无法在容器管理的 bean 上调用 getTransaction()

当我做这样的事情时..

em.save(entity);
em.flush();

我收到了没有正在进行的交易错误。

我想知道,我该如何解决。提前致谢。希望您尽快回复。

最佳答案

与其进行程序化事务管理,不如使用声明式。这意味着向您的服务添加另一个注释。我不确定您使用的是什么框架,但如果您使用的是 Spring,则可能是 @Transactional,或者如果您使用的是 EJB3,请添加 @TransactionAttribute(TransactionAttributeType.REQUIRED )。完成此操作后,删除这些行 em.getTransaction().begin();em.getTransaction().commit(); 您的容器现在应该启动/为您停止交易。容易多了!

关于java - em.merge() 没有保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24498483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com