Tag: orm

使用关系深度复制EJB实体bean

我所拥有的是一个实体bean,例如Entity (EJB 3),它在ArrayList中保存相同类型的子节点,他的父节点以及与另一个实体的关系。 用户可以拥有许多实体,反之亦然(多对多)。 我想要做的是覆盖Entity.clone() (或者有一个新方法)来深度复制Entity以及属于同一父节点并分配给现有用户的子节点克隆。 我已经设置了克隆方法来创建Entity的克隆(一个新的实体),然后在foreach循环中用子实体的克隆填充它。 但是这给了我一个并发修改exception,我最终得到的是没有children的初始Entity bean的克隆。 我的问题是: 我想要做什么是可行的,还是应该从例如Facade管理深度复制? 如果它是可行的,你能指导我阅读或给我一些提示,因为到目前为止我通过外观进行克隆,它已成为我的应用程序的主要负担。 提前致谢!! pataroulis

@MappedSuperclass不是@entity?

所以我正在使用DerbyDB,我正在设置一些实体。 我有一个@MappedSuperclass ,它被用作某些实体的超类( @Entity )。 更具体地说,我有一个超类User和3个子类,即admin , regular和guest 。 现在我有一个不同的实体,让我们说应该引用(作为其中一个字段)其所有者的文件。 所以我创建了一个名为User owner的字段。 我得到的错误是: Exception Description: [File] uses a non-entity [User] as target entity in the relationship attribute [field owner]. 有解决方法吗?

将提取更改为EAGER似乎可以修复无关的会话缓存问题

这不是一个“它破碎”的问题。 这是为什么不打破?! 题。 不幸的是,需要一些上下文。 之前我问了一个问题,我想如何覆盖Hibernate的第一级缓存,以便获得新更新的JobStatus实体的数据而不是缓存(但是陈旧的)版本。 我得到了两条有用的评论:首先,我应该在服务方法上尝试@Transactional(propagation = Propagation.REQUIRES_NEW) ; 第二,在尝试分离线程来处理某些东西时,我调用了thread.run()而不是thread.start() ,它运行代码但是在同一个线程上。 应用这些建议后,我发现REQUIRES_NEW似乎没有做任何事情,并且thread.start()产生了ERROR: org.hibernate.LazyInitializationException failed to lazily initialize a collection of role: DataSourceResults 现在,作为实验,我将DataSourceResults中的集合字段的加载更改为EAGER 。 这不仅修复了LazyInitializationException,而且修复了过时的会话缓存问题,即使这是一个完全不同的实体类型 JobStatus。 我的问题基本上是: 这怎么可能? 供参考:所涉及实体的ORM XML。 <!—-> <!—-> TIMESTAMP

Map的条目用于分隔Hibernate中的列

假设我有一个Players表: ID | name | email | age | … 1 | ‘bob’ | null | 23 | … 有很多列(比如50),每个列(除了ID )都可能为空。 请忽略桌面设计,现在必须保持这种方式:-( 我想将这个表映射到一个实体(即我希望它能同时用于保存和读取): public class Player implements Serializable { private Map attributes; // more code, ctor, setters, getters etc… } 其中表中的每一列都被读作地图的一个条目。 因此,在给定的示例中,地图将具有具有适当值的密钥ID , name , email等。 如果Hibernate需要,我可以和一个单独的id成员一起生活,但我想避免在一个类中有50个成员 。 这可能在Hibernate 4中吗?

hibernate SQLquery提取变量

如何从hibernate SQL查询中提取变量total,min,max并将它们分配给java变量? (select count(*) as total, min(price) as min, max(price) as max from product).addScalar(“total”, Hibernate.INTEGER).addScalar(“min”, Hibernate.INTEGER).addScalar(“max”, Hibernate.INTEGER);

ORMLite – 强制读取对象具有相同的标识

我正在用ORMLite读取对象的层次结构。 它的形状像一棵树,父母的@ForeignCollection为0+孩子,每个孩子都用@DatabaseField(foreign=true)引用它的父。 我正在阅读并立即保存整个层次结构。 由于我是ORM的新手,也是ORMLite的新手,我不知道当读取数据库中具有相同ID的对象时,它们不会被创建为具有相同Identity 的实际相同的对象 ,但是有几个副本具有相同的ID 。 意思是,我现在面临的问题是(让我们说“ – >”代表“指代”)A – > B – > C!= C – > B – > A. 我想通过手动通过提供的DAO读取它们并通过它们的ID将它们放在一起来解决问题, 确保具有相同ID的对象具有相同的标识 。 是否有ORMLite本地解决方法? 如果是,那么它是什么,如果没有,解决这个问题的常用方法是什么? 这是ORM的一般问题吗? 它有名字(我想了解更多信息)吗? 编辑: 我的层次结构是这样一个建筑物包含几个楼层,每个楼层都知道它的建筑物,每个楼层包含几个区域,每个区域都知道它的楼层。

hibernate时的未知实体

执行主类时出现此错误。 我试图在表组合中插入新记录。 如您所见,我正在使用Hibernate ORM模型来做到这一点。 还可以说hibernate在没有任何问题的情况下连接数据库! Exception in thread “main” org.hibernate.MappingException: Unknown entity: com.nortal.vspa.model.Portfolio at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1129) at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1402) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:756) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:748) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:744) at com.nortal.vspa.main.Main.main(Main.java:24) 实体类: @Entity @Table(name=”portfolio”) public class Portfolio implements Serializable { private static final long serialVersionUID = -1136208004146721604L; @Id @Column(name=”symbol”) […]

Hibernate:直接在bean中设置Id或调用load()或get()方法之间的区别?

以下是加载的示例: – Stock stock = (Stock)session.load(Stock.class, new Integer(2)); StockTransaction stockTransactions = new StockTransaction(); //set stockTransactions detail stockTransactions.setStock(stock); session.save(stockTransactions); 有什么区别,如果我直接设置id如下: – Stock stock =new Stock(); stock.setId(2); StockTransaction stockTransactions = new StockTransaction(); //set stockTransactions detail stockTransactions.setStock(stock); session.save(stockTransactions); 因为我已经知道了股票表的Id。 你打电话给负载还是搞定?

知道何时达到数据库与缓存

鉴于Hibernate的所有智能以及它的各种缓存策略,我如何知道某个操作是否导致物理数据库命中或来自缓存?

如何对Entity-Bean @OneToMany关系应用默认限制

我有两个实体模型,Customer和Order。 每个客户可能有数千个订单。 我在这两个实体之间有一个OneToMany和ManyToOne关系。 如何将此关系列表仅限制为前10个订单? 是否可以在@OneToMany上应用’WHERE’条件作为属性? 喜欢: @OneToMany(“Where Order.orderNo > 100”) 我的问题是当实体管理器创建的对象所有订单都在内存中创建时。 延迟加载无法解决我的考虑,因为我需要在默认构造中获得前10个订单。