Tag: 持久性

在hibernate / jpa最佳实践问题中将分离的或新的实体与现有实体合并

当业务层创建一个新实体时,逻辑上表示应该更新的现有实体的实例(比如它们共享相同的业务键),这种合并错误做法的方法是什么? public User add(User user){ User existingUser = getUserDao().findByBusinessKey(user.getBusinessKey(), false); user.setId(existingUser.getId()); user = getUserDao().merge(user); return user; } 我问,因为在分离的实体上显式设置ID对我来说感觉很奇怪,但即使User实体的equals和hashcode方法被适当地实现,在这里设置ID是确保合并发生的唯一方法。 有更好的做法吗? 这种方法有特殊的缺点,以后会咬我吗? 谢谢参观!

Hibernate无法初始化代理 – 没有Session

我的代码检索与用户相关的所有信息: SessionFactory sessionFactory = HibernateUtilities.configureSessionFactory(); Session session = sessionFactory.openSession(); UserDetails ud = null; Set userAddress = null; try { session.beginTransaction(); ud = (UserDetails) session.get(UserDetails.class, 1); userAddress = ud.getAddresses(); session.getTransaction().commit(); } catch (HibernateException e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { session.close(); } System.out.println(ud.getName()); for(Address addr: userAddress){ System.out.println(“State ” + addr.getState()); } ud.getAddresses()只返回一组用户的Address es。 我的问题是:为什么即使会话已经关闭, ud对象仍然具有其值(例如,名称)? getAddresses()是UserDetails类的实例变量。 […]

JPA中的TransactionAttribute.REQUIRES_NEW

我测试了我的ejb jpa交易。 我使用Container管理的entityManager: @PersistenceContext(unitName = “ParticularUnit”) EntityManager em; 这样我有事务PersistanceContext范围和容器管理每个事务。 对于池化会话bean的每个实例,创建了entityManager的实例。 当我使用@TransactionAttribute(TransactionAttributeType.REQUIRED)标记bean方法并在其中调用两个方法时,我预期方法test1将有另一个PersitenceContext,但我很惊讶,因为它是相同的。 @TransactionAttribute(TransactionAttributeType.REQUIRED) public void test(Configuration config){ if (!em.contains(config)) { config = em.find(Configuration.class, config.getId()); } System.out.println(“********************”); System.out.println(“actiovation, em= “+ em); System.out.println(“actiovation, config= “+ config); System.out.println(“*********************”); test1(config); test2(config); } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void test1(Configuration config){ config = em.find(Configuration.class, config.getId()); System.out.println(“////////”); System.out.println(“requires_new”+ config); System.out.println(“requires_new, em= “+ em); System.out.println(“—————-“); } […]

Java,代码生成和持久性框架

是否有任何Java代码生成持久性框架? 首先是“数据库优先”而不是对象模型? 我知道这可能是Java世界中的异端,我只想知道是否存在这样的框架。 这些天我更像是一个.NET人。 因此,想到.NET Tiers或CSLA等.NET端工具。

Hibernate / persistence有哪些常见问题?

我有一个应用程序,我想测试防止与Hibernate和/或持久性相关的可能问题。 还有什么问题? 我如何重现它们(字面意思)? 你怎么从他们身上恢复过来? 为了说清楚:我在谈论multithreading集群环境(最复杂的环境)。 我的唯一: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) 复制: 加载对象。 使用HQL进行更新。 尝试更新(保存)加载的对象。 处理:不确定……

编译查询时出错:抽象模式类型“实体”未知

我正在开发一个带有数据库连接的游戏,我使用JPA来保存我的数据。 这是我的游戏实体: @Entity @Table(name = “game”) public class Game implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “game_id”) private int id; @Column(name = “name”) private String name; @Column(name = “nbTurns”) private int nbTurns; @Column(name = “playedOn”) @Temporal(TemporalType.TIMESTAMP) private Date playedOn; @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = “game_humans”, joinColumns […]

是否应该在equals和hashCode中考虑JPA实体的id字段?

我在使用JPA2和EclipseLink编写数据库应用程序的测试时遇到了问题: 我将一些实体添加到数据库中,稍后检索它并希望将它与具有我期望确认添加按预期工作的值的实例进行比较。 首先我写了类似的东西 assertEquals(expResult, dbResult); 哪个失败了,因为我真的不知道id字段的值,它是由数据库生成的,因此dbResult与我用new和手动填充创建的dbResult不同。 我看到两个选择: 要么我从equals和hashCode删除id字段,以便比较仅基于“实际值”。 不过,我不知道这是否会导致数据库或其他地方出现问题。 或者我编写测试以手动显式检查除id之外的每个字段。 我该怎么办?

如何坚持JavaFX GUI状态?

是否存在一种已经存在的直接方式来保持JavaFX GUI状态,包括为节点的userData字段进行自定义(反)序列化?

在Java桌面应用程序中保留数据的最佳方法是什么?

我的桌面应用程序中有一个庞大的Java对象树,我正在尝试确定将它们作为文件保存到文件系统的最佳方法。 我曾经有过一些想法: 使用DataOutputStream滚动我自己的序列化程序 :这将使我能够最大程度地控制文件中的内容,但代价是对其进行微观管理。 使用ObjectOutputStream及其各种相关类的直接旧序列化 :虽然因为我发现数据很脆弱,但我没有卖掉它。 更改任何对象的结构会破坏它的序列化实例。 所以我陷入了似乎是一个可怕的版本化噩梦。 XML序列化 :它并不那么脆弱,但直接序列化的速度要慢得多。 它可以在我的程序之外进行转换。 JavaDB :我考虑过这一点,因为我很乐意编写JDBC应用程序。 这里的区别在于数据库实例仅在文件打开或保存时保持不变。 它并不漂亮但是……如果以后需要,它确实可以迁移到中央服务器架构,它引入了以更简单的方式查询数据模型的可能性。 我很想知道其他人的想法。 而且我希望我错过了一些比上面那些更明显,更简单的方法。 以下是从以下答案中剔除的更多选项: 对象数据库 – 具有比ORM方法少得多的基础结构,并且比XML方法执行速度更快。 谢谢aku

在不使用关系数据库的情况下,使用Java存储和检索对象的简便方法?

您是否知道在Java中存储和检索对象的“简单”方法, 而不使用像Hibernate这样的关系DB / ORM ? [ 注意,我没有考虑为此目的进行序列化,因为它不允许在对象图的中间检索任意对象。 我也没有考虑DB4O,因为它有限制性许可。 谢谢。 ] “简单”含义:不必处理诸如键/值对之类的低级细节来重建对象图(与BerkeleyDB或传统缓存一样)。 这同样适用于从面向文档或列的DB(CouchDB,HBase,…,甚至Lucene)重建对象。 也许有一些有趣的项目提供了我所不知道的所提到的存储系统和对象模型(如ORM将用于RDBMS)之间的一层集成。 是否有人成功地在生产中使用这些,或者尝试除关系数据库之外的持久性策略? RDF商店怎么样? 更新 :我遇到了一篇非常有趣的文章: 分布式键值存储列表