Tag: orm

Hibernate @ElementCollection – 需要更好的解决方案

我在Web应用程序中使用Hibernate 3.5.a-Final作为ORM-Layer。 我有几个Beans有相同的代码片段,这让我觉得这个设计并不是最好的。 但我无法弄清楚如何在hibernate中实现更好的一个。 要求 有几个类需要在多个语言环境中包含本地化描述 这些需要持久保存到db中 它们必须可以通过所有语言环境的子字符串进行搜索(如果seachstring是任何描述的子字符串,则显示) 本地化描述应该是可查询的,无需加载主对象(通过master-object-id,-type和locale) 当前的解决方案(不解决最后的要求) 每个类都包含一个注释为的HashMap @ElementCollection(fetch=FetchType.EAGER) @CollectionTable(name = “localized[X]Descriptions”, joinColumns = @JoinColumn(name = “id”)) @MapKeyJoinColumn(name = “locale”) public Map getLocalizedDescriptions() { return localizedDescriptions; } [X]是这个class级的名字 对于每个类,它是一个附加表(由hibernate生成) create table localized[X]Descriptions ( id integer not null, localizedDescriptions varchar(255), localizedDescriptions_KEY varchar(255), primary key (id, localizedDescriptions_KEY) ) 由于某种原因, @MapKeyJoinColumn被忽略了…… 我更喜欢的是这样的单个表格: create table localizedDescriptions […]

Hibernate本机查询:无效的列名错误SQL-17006

package com.abc.def.model; import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Entity; import javax.persistence.Embeddable; import javax.persistence.IdClass; import java.util.Date; import java.io.Serializable; @NamedNativeQuery(name=”getMetadata”,query=” select a.name alias1,a.fullname alias2, b.name alias3,b.age alias4, c.height alias5,c.something alias6, d.otherthing alias7 from lame_table_name a, lame_table_name_2 b where a.id = b.id and b.id = c.id and c.id = d.id and d.id = :namedparameter order by a.index,b.index “, resultClass=MetadataModel.class) […]

将数据集加载到数据库时,DBUnit的NoPrimaryKeyException

当我尝试运行一个使用DBUnit的unit testing时,我得到NoPrimaryKeyException。 数据表是使用Hibernate创建的,是两个映射多对多关系的类之间的连接表。 定义关系的注释如下: @Override @ManyToMany @JoinTable(name=”offset_file_offset_entries”, joinColumns={@JoinColumn(name=”offset_entry_id”)},inverseJoinColumns={@JoinColumn(name=”file_description_id”)}) public List getOffsets() { 我用来定义数据集的XML文件中的其他条目似乎工作正常但不是连接表。 我得到以下exception: org.dbunit.dataset.NoPrimaryKeyException: offset_file_offset_entries at org.dbunit.operation.UpdateOperation.getOperationData(UpdateOperation.java:72) at org.dbunit.operation.RefreshOperation$UpdateRowOperation.(RefreshOperation.java:266) at org.dbunit.operation.RefreshOperation.createUpdateOperation(RefreshOperation.java:142) at org.dbunit.operation.RefreshOperation.execute(RefreshOperation.java:100) at org.dbunit.ext.mssql.InsertIdentityOperation.execute(InsertIdentityOperation.java:217) at uk.co.sabio.obscheduler.application.dao.AbstractBaseDatabaseTest.setUp(AbstractBaseDatabaseTest.java:57) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runManaged(AbstractJUnit38SpringContextTests.java:332) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.access$0(AbstractJUnit38SpringContextTests.java:326) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests$1.run(AbstractJUnit38SpringContextTests.java:216) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTest(AbstractJUnit38SpringContextTests.java:296) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTestTimed(AbstractJUnit38SpringContextTests.java:253) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runBare(AbstractJUnit38SpringContextTests.java:213) at junit.framework.TestResult$1.protect(TestResult.java:110) at junit.framework.TestResult.runProtected(TestResult.java:128) at junit.framework.TestResult.run(TestResult.java:113) at junit.framework.TestCase.run(TestCase.java:124) at junit.framework.TestSuite.runTest(TestSuite.java:232) at junit.framework.TestSuite.run(TestSuite.java:227) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) at […]

截断所有表的简单方法,清除一级和二级hibernate缓存?

我正在为我正在研究的S​​pring / Hibernate应用程序编写一些集成测试,我想尽可能接近真实条件进行测试,包括使用Hibernate的二级缓存和提交事务。 我想知道是否有一种有效的方法让Hibernate从数据库和缓存中删除所有内容。 我能想到的最好的就是为每种类型的对象使用HQL“从XImpl删除”行,但我有几十个域对象,感觉应该有更好的方法。

JPA:如何对实体中的Set字段进行排序?

我使用的是Spring 3.2.11.RELEASE,Hibernate 4.3.6.Final和JPA 2.1。 我有以下实体与以下字段… @Entity @Table(name = “user”) public class User implements Serializable, Comparable { … @ManyToMany @JoinTable(name = “user_organization”, joinColumns = { @JoinColumn(name = “USER_ID”) }, inverseJoinColumns = { @JoinColumn(name = “ORGANIZATION_ID”) }) @LazyCollection(LazyCollectionOption.FALSE) @SortNatural private SortedSet organizations; 上面,组织的排序由组织的名称字段完成。 当我运行JPA查询来检索User对象时,我想基于与它们关联的组织的有序列表进行排序。 我试过这个…… final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder(); final CriteriaQuery criteria = builder.createQuery(User.class); … final […]

Hibernate使用自定义修订实体

我正在尝试扩展我的修订表。 按照手册我创建了自定义修订实体: package com.terminal.audit; import org.hibernate.envers.DefaultRevisionEntity; import org.hibernate.envers.RevisionEntity; import org.hibernate.envers.RevisionNumber; import org.hibernate.envers.RevisionTimestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Transient; import java.util.Date; @Entity @RevisionEntity(CustomRevisionListener.class) public class CustomRevisionEntity extends DefaultRevisionEntity { @Id @GeneratedValue @RevisionNumber private int id; @RevisionTimestamp private long timestamp; private String username; public int getId() { return id; } public void setId(int id) { […]

Hibernate,Persistence和@OneToMany以及@ManyToOne注释问题

我对@OneToMany和@ManyToOne注释有些问题。 我有两个Class Suite和SuiteVersion。 SuiteVersion取决于套房。 所以我在我的代码中实现了这个: class级套房: @OneToMany(mappedBy = “suite”) @Cascade(CascadeType.DELETE_ORPHAN) private List listSuiteVersion = new ArrayList(); Class SuiteVersion: @ManyToOne() @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) private Suite suite; 但是当我删除与SuiteVersion相关联的套件时,我遇到了一些问题。 Hibernate不会在Suite之前删除SuiteVersion。我不知道为什么,因为我在我的代码中已经提到过这个: @Cascade(CascadeType.DELETE_ORPHAN) 这是我删除套件时获得的日志: Hibernate:从SUITE中删除ID_SUITE =? 13août201009:40:50 org.hibernate.util.JDBCExceptionReporter logExceptions注意:SQL错误:-8,SQLState:2350413août201009:40:50 org.hibernate.util.JDBCExceptionReporter logExceptions GRAVE:完整性约束违规:外来关键不行动; FK42895651EA304E6表:SUITE_VERSION 预先感谢您的帮助。 最好的祝福, 弗洛朗, PS:对不起我的英语我是法国人。

如何使用Hibernate进行投影分组

我需要查找特定群组中的学生列表,并列出特定地址以及他们所在位置的电话号码。 我的主要问题是我无法检索每个学生的电话号码作为集合。 例如,如果我有student1,student2。 电话1111用于位置1中的student1和电话2222,电话3333用于位置1中的student2,电话444用于位置2中的student2。 可以说我有 Student1 Alex group1 1111 Location1 Street1 Student3 Jack group1 93939 Location2 Street4 Student7 Joe group2 22223 Location4 Street8 Student2 John group1 2222 3333 Location1 Street1 Student2 John group1 4444 Location1 Street2 Student12 Mark group1 4423 Location9 Street9 带数据的示例输出 User asks for all students in group1 and location1 Student1 Alex Street1 […]

HQL错误:with-clause引用了两个不同的from子句元素

我开始使用Hibernate并且我正在使用HQL,使用一些连接从数据库中检索数据但是得到此错误,任何有关如何解决此问题的帮助表示赞赏。 Field.hbm.xml文件: Rule.hbm.xml文件: HQL查询: select t.id, t.name, t.src_field_map.id, s1.field_map_nm as src_field_map_nm, t.tgt_field_map.id,s2.field_map_nm as tgt_field_map_nm from Rule as t left join t.src_field_map as s1 left join t.tgt_field_map as s2 with (s1.id = t.src_field_map.id and s2.id = t.tgt_field_map.id) 堆栈跟踪: ERROR: with-clause referenced two different from-clause elements with-clause referenced two different from-clause elements at org.hibernate.hql.internal.ast.HqlSqlWalker.handleWithFragment(HqlSqlWalker.java:465) at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:413) at […]

JPAinheritanceentitymanager.find生成ClassCastException

我有这样的类层次结构: @Entity @Table (name=”call_distribution_policies”) @Inheritance (strategy=InheritanceType.JOINED) public class CallDistributionPolicy implements Serializable, Cloneable{ —————- } @Entity @Table(name=”skill_based_call_distribution_policies”) public class SkillBasedCallDistributionPolicy extends CallDistributionPolicy { ————– } public class CallDistributionPolicyDAOJPAImpl extends AbstractJPADAOImpl implements CallDistributionPolicyDAO { } public CallDistributionPolicy get(long id) { try { Query query = entityManager .createQuery(“from CallDistributionPolicy where id = :id”); query.setParameter(“id”, id); List resultList = […]