我有一个 java 项目,其中包含一组单元测试,这些单元测试使用 JPA2 执行简单的更新和删除。单元测试运行没有问题,我可以验证数据库中的更改 - 一切都很好。我尝试在处理程序(Smartfox 扩展)中复制/粘贴相同的函数 - 我收到回滚异常。
列“levelid”不能为空。
寻找有关原因的建议。我可以从此扩展 ( GetModelHandler ) 中执行数据读取,但尝试设置数据不起作用。这完全令人困惑。
总结来说——
这有效...
@Test
public void Save()
{
LevelDAO dao = new LevelDAO();
List levels = dao.findAll();
int i = levels.size();
Level l = new Level();
l.setName("test");
Layer y = new Layer();
y.setLayername("layer2");
EntityManagerHelper.beginTransaction();
dao.save(l);
EntityManagerHelper.commit();
}
由于回滚异常而失败
public class SetModelHandler extends BaseClientRequestHandler
{
@Override
public void handleClientRequest(User sender, ISFSObject params)
{
LevelDAO dao = new LevelDAO();
List levels = dao.findAll();
int i = levels.size();
Level l = new Level();
l.setName("test");
Layer y = new Layer();
y.setLayername("layer2");
EntityManagerHelper.beginTransaction();
dao.save(l);
EntityManagerHelper.commit();
}
}
Level 和 Layer 类分别具有 OneToMany 和 ManyToOne 属性。
任何想法表示赞赏。
Update
这是架构
Level
--------
levelid (int) PK
name (varchar)
Layer
--------
layerid (int) 11 PK
layername (varchar) 100
levelid (int)
Foreign Key Name:Level.levelid ,
On Delete: no action,
On Update: no action
当我改变的时候
EntityManagerHelper.beginTransaction();
dao.update(l);
EntityManagerHelper.commit();
to
EntityManagerFactory factory = Persistence.createEntityManagerFactory("bwmodel");
EntityManager entityManager = factory.createEntityManager();
entityManager.getTransaction().begin();
dao.update(l);
entityManager.persist(l);
entityManager.getTransaction().commit();
这执行保存但不更新?我在这里遗漏了一些明显的东西。