Java JPA回滚异常,但不在单元测试中

Java JPA回滚异常,但不在单元测试中,java,mysql,jpa,Java,Mysql,Jpa,我有一个java项目,其中包含一组单元测试,使用JPA2执行简单的更新和删除。单元测试运行没有问题,我可以验证数据库中的更改-一切正常。我尝试在处理程序(Smartfox扩展)中复制/粘贴相同的函数-我收到一个回滚异常 列“levelid”不能为空 寻找关于为什么会这样的建议。我可以在此扩展(GetModelHandler)内执行数据读取,但尝试设置数据无效。这完全令人困惑 总而言之- 这很有效… @Test public void Save() { LevelDAO dao = new

我有一个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属性

有什么想法吗

更新

这是模式

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


这会执行保存而不是更新吗?这里我遗漏了一些明显的问题。

我能看到的最可能的问题是不同的数据库定义。测试EJB通常使用动态生成的内存中数据库。而在实际生产中,您使用的是一个实际的数据库,它可能会强制执行约束


请尝试为levelid值指定一个值或更改数据库架构。

能否发布数据库架构供我们查看?
EntityManagerFactory factory = Persistence.createEntityManagerFactory("bwmodel");
EntityManager entityManager = factory.createEntityManager();
    entityManager.getTransaction().begin();
dao.update(l);
    entityManager.persist(l);
    entityManager.getTransaction().commit();