Tag: persistence

如何在相对较大的应用程序中使用Entity Manager管理数据库事务?

我使用MYSQL数据库和Swing应用程序框架以及javax.persistence开发了一个相当大的CRUD应用程序。 我的问题是,鉴于javax.persistence.Entitymanager,我应该如何最好地管理我的交易? 目前,我有一个由Application类持有的实体管理器实例。 它被传递给所有请求页面,而这些页面又使用它来持久化并合并实体。 我在应用程序启动时启动一个事务,并在每次进行更改时提交(并重新启动)。 它是否正确? 或者我应该为每个组件/页面保持单独的实体管理器? 我什么时候应该承诺? 所有这些问题现在都出现了,因为我最近开始得到类型的exception:java.sql.SQLException:超出锁定等待超时; 尝试重新启动事务错误代码:1205这让我相信我在管理数据库事务时做错了什么…. 在此先感谢您的帮助,您可以给我!

Ebean或锡耶纳有多成熟?

在上一次我听到很多关于hibernate的抱怨。 事实上,我对hibernate也有一些痛苦的经历。 所以我读到了Ebean和锡耶纳 。 两者都有有趣的方法。 不幸的是,数据库访问层很容易编写,但是如果你的项目增长并且你必须处理好的数据库表,你就会知道它们是否好。 所以评估这样一个工具真的很难。 Hibernate是众所周知的,你可以肯定你可以解决它的问题。 有时你需要学习很多,但你可以解决它。 Ebean怎么样? 有没有真实的应用程序? 支持哪些数据库? 它可靠吗? 在搜索了一下后,我发现有更多的ORM框架,那么至少有一个可靠的框架吗?

EJB3和手动层次结构持久性

我有一个遗留数据库,我使用EJB3进行建模。 数据库的状况非常糟糕,我们对数据库的插入方式有一些不寻常的限制。 现在我想在一个适合数据库结构的层次结构中建模数据库,但我希望能够单独手动插入每个实体,而不会让持久性管理器试图保持实体子项。 我正在尝试类似以下内容(样板左侧): @Entity @Table(name = “PARENT_TABLE”) public class Parent { @Id @Column(name = “ID”) int id; @OneToMany List children; } @Entity @Table(name = “CHILD_TABLE”) public class Child { @Id @Column(name = “ID”) int id; } 现在这引发了一个exception: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST […]

更新现有的JobDataMap

我有一个已经安排的Quartz工作。 我想更新与之关联的JobDataMap。 如果我用JobDataMap jobDataMap = scheduler.getJobDetail(….).getJobDataMap()获取JobDataMap jobDataMap = scheduler.getJobDetail(….).getJobDataMap() ,该地图是“实时”吗? 即。 如果我改变它,它会被保存在调度程序中吗? 如果没有,我该如何坚持下去?

为什么我们必须在扩展的PersistenceContext中手动flush()EntityManager?

在我们的J2EE应用程序中,我们使用EJB-3有状态bean来允许前端代码创建,修改和保存持久性实体(通过JPA-2管理)。 它看起来像这样: @LocalBean @Stateful @TransactionAttribute(TransactionAttributeType.NEVER) public class MyEntityController implements Serializable { @PersistenceContext(type = PersistenceContextType.EXTENDED) private EntityManager em; private MyEntity current; public void create() { this.current = new MyEntity(); em.persist(this.current); } public void load(Long id) { this.current = em.find(MyEntity.class, id); } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void save() { em.flush(); } } 非常重要的是,为了避免过早提交,只有save()方法在一个事务中,所以如果我们调用create() ,我们就不会在数据库中插入任何内容。 奇怪的是,在save()方法中,我们必须调用em.flush()才能真正命中数据库。 事实上,我试过并发现我们也可以调用em.isOpen()或em.getFlushMode() ,以及任何与“em相关”的东西。 我不明白这一点。 由于save()在一个事务中,我认为在方法结束时,事务将被提交,因此持久化实体管理器会自动刷新。 […]

entityManager.getTransaction()。rollback()分离实体?

我有以下代码: EntityManagerFactory emf = Persistence.createEntityManagerFactory(“test”) EntityManager entityManager = emf.createEntityManager() User user = entityManager.find(User.class, 0); entityManager.getTransaction().begin(); entityManager.getTransaction().rollback(); entityManager.refresh(user); 这会在第四行抛出IllegalArgumentException,说“Entity not managed”。 如果我将第三行更改为.commit()而不是.rollback() ,一切似乎都正常。 这里发生了什么? 我可以防止这种情况发生吗? 更新: @DataNucleus指引我走向PersistenceContext。 如何更改代码中的持久性上下文?

在Room中创建Generic DAO接口时,“参数的类型必须是使用@Entity注释的类”

我正在使用Room架构组件来实现持久性。 我已经创建了通用DAO接口以避免样板代码。 Room Pro Tips 但是我的代码没有编译说错误:(21,19)错误:参数的类型必须是用@Entity或它的集合/数组注释的类。“ 对于通用类T. interface BaseDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(T… entity); @Update void update(T entity); @Delete void delete(T entity); } @Dao public abstract class ReasonDao implements BaseDao { @Query(“SELECT * from Reason”) abstract public List getReasons(); } 这里有什么我想念的吗? 它就像这样工作

在persistence.xml文件中读取环境变量

我想读取persistence.xml文件中的环境变量。 想法是我不希望从属性文件中读取我的数据库详细信息,因为获取属性文件覆盖更改。相反,我想从环境变量中读取详细信息。 有没有办法达到这个标准。 我使用Spring 3,我的独立应用程序将部署在unix机器中。

Play Framework:PersistenceException:该类型不是注册实体? (Ebean)

我正在关注Java的Play Framework 2.0教程,并在尝试保存ebean模型时遇到此错误( task.save() )。 [PersistenceException:类型[class models.Task]不是注册实体? 如果没有明确列出要使用的实体类,Ebean将在类路径中搜索它们。 如果实体位于Jar中,请检查ebean.properties文件中的ebean.search.jars属性或检查ServerConfig.addJar()。]

Java持久性:转换为Query.getResultList()的结果?

嘿大家,我是新手,坚持/hibernate,我需要你的帮助。 这是情况。 我有一个包含一些东西的表。 我们称他们为人。 我想从数据库中获取该表中的所有条目。 我有一个Person类,它是一个简单的POJO,表中的每一列都有一个属性(name,age,..) 这就是我所拥有的: Query lQuery = myEntityManager.createQuery(“from Person”) List personList = lQuery.getResultList(); 但是,我收到一条警告,说这是从List到List的未经检查的转换 我认为只需将代码更改为 Query lQuery = myEntityManager.createQuery(“from Person”) List personList = (List)lQuery.getResultList(); 会工作..但它没有。 有没有办法做到这一点 ? 持久性是否允许我设置查询的返回类型? (通过generics可能吗?)