【发布时间】:2011-11-22 02:38:00
【问题描述】:
我正在开发一个 C/S java 项目并尝试使用 Eclipselink 来执行 ORM(客户端缓存数据库,derby)。 使用示例和表达式进行查询非常容易,但是在插入/更新时,我发现应该使用实体管理器(我在 java ORM 中很新,也许还有另一种方法?)。 当我尝试创建 em 时,它总是抛出一个异常,告诉我我需要一个服务器会话(即无法按名称找到持久性单元)。 当我使用会话 bean 和 @PersistenceUnit 注释时,它返回 Null。
我犯了一些愚蠢的错误吗?或者有没有简单的方法来更新/插入值?我认为可能有一些方法,如 session.save(Object) 或类似的方法可以使这项工作变得简单。
编辑:我尝试使用 UnitOfWork,但出现“尝试修改身份列”错误,我应该更改地图文件还是让 Eclipselink 识别身份 PK 的东西?
@GeneratedValue(strategy = GenerationType.IDENTITY)
在 POJO 中添加这一行不起作用。
编辑:我尝试使用工作单元在此处插入值,这是代码
SessionFactory sessionFactory = new SessionFactory("default");
Session session = sessionFactory.getSharedSession();
UnitOfWork uow = session.acquireUnitOfWork();
SysUser usr2 = new SysUser();
usr2.setUserName("test");
usr2.setUserPassword("test");
uow.registerObject(usr2);
uow.commit();
但它会导致
Internal Exception: java.sql.SQLSyntaxErrorException: Attempt to modify an identity column 'DB_ID'.
这是我使用的注释:
@Column(name = "DB_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
protected int dbId;
对于 EntityManager:
<persistence-unit name="my-app-name">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:/app/jdbc/jdbc/ConnectionDerbyDS</jta-data-source>
【问题讨论】:
标签: java jpa orm eclipselink