Tag: orm

如何在运行时配置JPA表名?

我有一个问题,我只有一个数据库可供使用,但我有多个服务器,我希望他们为每个服务器使用不同的表名。 现在我的class级配置为: @Entity @Table(name=”loader_queue”) class LoaderQueue 我希望能够让dev1服务器指向loader_queue_dev1表,dev2服务器指向loader_queue_dev2表。 有没有一种方法可以使用或不使用注释来做到这一点? 我希望能够有一个单独的构建,然后在运行时使用类似系统属性的东西来更改该表名。

JPQL:查询多个列时,哪种对象包含结果列表?

我正在尝试做一些在PHP&Co中很容易的事情:SELECT COUNT(x)as numItems,AVG(y)as average,… FROM Z 在PHP中我会得到一个像[{numItems:0,average:0}]这样的简单数组,我可以这样使用: echo “Number of Items: ” . $result[0][‘numItems’]; 通常在JPQL中,您只查询单个对象或单个列并获取Lists类型,例如List或List 。 但是,在查询多个列时,您会得到什么?

如何升级使用ORM工具构建的数据库模式?

我正在寻找使用ORM工具升级数据库模式的通用解决方案,如JPOX或Hibernate。 你是如何在你的项目中做到的? 我想到的第一个解决方案是创建自己的升级数据库机制,SQL脚本完成所有工作。 但在这种情况下,我必须记住每次更新对象映射时都要创建新脚本。 而且我仍然需要处理低级SQL查询,而不仅仅是定义映射并允许ORM工具完成所有工作…… 所以问题是如何正确地做到这一点。 也许有些工具可以简化这项任务(例如,我听说Rails内置了这样的机制),如果是这样,请帮我决定为我的下一个Java项目选择哪种ORM工具。

HQL查询是否始终命中数据库并获得结果?

我正在经历hibernate以及何时使用Criteria vs HQL ,我的理解是使用Hibernate,每当我们在两个实例中通过Criteria或HQL查询数据库时,hibernate将得到结果集并放入内存然后当我们调用它时再次查询,数据将从内存中获取而不是点击该数据库,我的理解是否正确? 另外正如您从下面提到的评论中看到的那样,有人建议Hibernate Criteria会从会话中获取数据,而HQL总会进入并命中数据库,因此对HQL查询的任何数量的多次调用都将进入并命中数据库,如果这是那么HQL导致的问题多于解决问题。 请对此提出建议,因为我对这种情况有点困惑。 参考问题

如何强制Hibernate 3.3或3.5使用CGLib而不是Javassist?

是否仍然可以强制Hibernate 3.3或3.5使用CGLib而不是Javassist? 在我的属性文件中,我设置了 hibernate.bytecode.provider = cglib 但这似乎并没有这样做。 有什么想法吗?

如何在Hibernate中持久化非实体子类中的实体

我试图将实体扩展为非实体,用于填充超类的字段。 问题是,当我尝试保存它时,Hibernate会抛出MappingException。 这是因为即使我将ReportParser强制转换为Report,运行时实例仍然是ReportParser,因此Hibernate抱怨它是一个未知实体。 @Entity @Table(name = “TB_Reports”) public class Report { Long id; String name; String value; @Id @GeneratedValue @Column(name = “cReportID”) public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } @Column(name = “cCompanyName”) public String getname() { return this.name; } public void setName(String name) { this.name = […]

Hibernate持久化Map 而不引用另一个表

你能帮我用Hibernate来持久保存字符串的地图吗? 地图值来自客户端并且是随机的,因此我不想为地图的值存储单独的表 例外 引起:org.hibernate.AnnotationException:找不到关联的类:java.lang.String 码 @Entity public class UserConfig { @Id @SequenceGenerator(sequenceName = “CONFIG_SEQ”, name = “ConfigSeq”, allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “ConfigSeq”) private Long id; @ElementCollection(targetClass = String.class) @CollectionTable(name = “MAP”) @MapKey(name=”key”) @Column(name=”value”) private Map map; 更新 如果MyEnum是一个未映射的类,你还可以解释如何持久化Map吗?

ORM:Non Primary-Key Join列上的OneToOne映射 – 按ISBN映射的Book和Inventory

我有一个按ISBN号映射的Book模型和Inventory模型,但ISBN不是其中的主键。 书籍属于Bookstores,而Inventory是针对一组书店(BookstoreChain)。 库存由属于BookstoreChain的所有书店共享。 我正在书侧使用Hibernate @OneToOne映射来加入ISBN列来获取库存信息。 不知何故,Hibernate正确生成左外连接查询,但Book对象上的库存为空。 它也不是懒惰的。 忽略书店和连锁店,如何在提取书籍时进行OneToOne或ManyToOne连接并获取库存? class Book{ @Id Long id @Column String isbn; @Column String title; @OneToOne(optional = true) @JoinColumn(name = “isbn”, referencedColumnName = “isbn”,insertable = false, updatable = false) Inventory inventory; } class Inventory{ @Id Long id @Column String chainId @Column String isbn @Column Long availableQty }

Hibernate和Hibernate JPA之间的区别

我发现了很多类似的问题 Hibernate库和Hibernate JPA库之间的区别 JPA和Hibernate有什么区别? jpa和hibernate之间的相似性和区别 但没有人回答我的下一个问题。 使用org.hibernate.SessionFactory和JPA javax.persistence.EntityManager实现的经典hibernate方法有什么不同? 我听说,这个JPA实现使用org.hibernate.SessionFactory并且像包装一样工作,这是真的吗?

在hibernate批量更新后,清除会话,刷新,刷新?

我们知道,在使用hibernate对数据库进行批量更新时(即使在HQL中),所做的更改不会复制到当前会话中存储的实体。 所以我可以调用session.refresh来加载对我的会话实体的修改。 我们经常调用flush来将修改发送到DB,但是文档说它“同步”会话和db … 这是否意味着flush能够为我的会话实体设置好的新db值? 或者flush会最终删除存储在实体中的旧数据库的新数据库值? (顺便说一句,如果hibernate的行为是第一个,它如何检测哪一个是“好的价值”?)。 如果我不能在这种情况下使用flush,那么在每次批量更新后清除会话是一个好习惯,这样我们肯定会在会话中有好的值?