Tag: jpa

为什么我们需要在元素中指定类?

我的persistence.xml有2个持久性单元。 它们每个都有几个元素。 我认为我们必须指定与某些持久性单元相关的所有类。 但我不小心忘了为新实体指定class-element,但程序工作正常,即使没有它。 然后我删除了所有类元素,一切正常。 那么,为什么我们需要呢? 示例代码: chartdemo.model.domain.Category

JPA 2.0 Hibernate @OneToMany + @MapKeyJoinColumn

OneToMany + MapKeyJoinColumn对我不起作用,请说明我做错了什么。 我正在使用JPA 2.0 + Hibernate 3.6.1并希望映射以下表: 到课程: @Entity public class Question { // id and other fields @OneToMany(mappedBy=”question”, cascade = CascadeType.ALL) @MapKeyJoinColumn(name=”language_id”) private Map statements = new HashMap(); } @Entity public class Statement { @Id private Long id; @ManyToOne @JoinColumn(name = “language_id”, nullable = true) private Language language; @ManyToOne @JoinColumn(name = “question_id”, nullable […]

生成的序列以1而不是1000开始,在注释中设置

我想问一些关于Hibernate创建的数据库序列的帮助。 我在我的实体类中有这个注释 – 下面的代码,以便为partners表提供单独的序列。 我希望序列以1000开头,因为我在部署期间使用import.sql将测试数据插入到我的数据库中,我想避免违反约束。 但是当我想要保留数据而不是我得到约束违规exception时它会告诉我partner_id = 2已经存在的事实。 看起来我错过了什么。 @Id @Column(name = “partner_id”) @SequenceGenerator(initialValue=1000, allocationSize=1, name = “partner_sequence”, sequenceName=”partner_sequence”) @GeneratedValue(generator=”partner_sequence”) private Long partnerId; 生成的序列如下所示: CREATE SEQUENCE partner_sequence INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; ALTER TABLE partner_sequence OWNER TO postgres; 我使用postgres 9.1。 我错过了什么? 这是我如何处理我想要的方式? 在此先感谢您的帮助!

Hibernate – TypedQuery.getResultList()返回同一对象的列表

以下是对问题的更多和更好的描述: 我做一个简单的选择查询。 返回列表包含确切的记录/对象数,就好像我在DB中执行相同的查询一样,但问题是所有对象都相同/相同。 例如,这是DB中的结果(我删除了空值): 26801 01-JAN-00 7 31-DEC-99 7 Obere Kirchstr。 26 CH 8304 Walliselln 26801 01-JAN-00 2 31-DEC-99 2 Obere Kirchstr。 26 CH 8304 Walliselln 这是变量地址的内容,因为我可以在执行查询后的调试期间在Eclipse中看到它: 地址ArrayList(id = 81) elementData Object [10](id = 86) [0] DLDBAddress(id = 82) [1] DLDBAddress(id = 82) [2] null … modCount 1 2号 DLDBAddress [persid = 26801,valPeriodStart = 1900-01-01,valPeriodEnd […]

NamedEntityGraph – JPA / Hibernate抛出org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包

我们有一个项目,我们需要懒惰地加载一个实体的集合,但在某些情况下,我们需要它们急切地加载它们。 我们在实体中添加了@NamedEntityGraph注释。 在我们的存储库方法中,我们添加了一个“javax.persistence.loadgraph”提示,以急切地加载在所述注释中定义的4个属性。 当我们调用该查询时,Hibernate会抛出org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags 。 有趣的是,当我将所有这些集合重新定义为急切获取时,Hibernate 会在没有MultipleBagFetchException的情况下急切地获取它们 。 这是蒸馏代码。 实体: @Entity @NamedEntityGraph(name = “Post.Full”, attributeNodes = { @NamedAttributeNode(“comments”), @NamedAttributeNode(“plusoners”), @NamedAttributeNode(“sharedWith”) } ) public class Post { @OneToMany(cascade = CascadeType.ALL, mappedBy = “postId”) private List comments; @ElementCollection @CollectionTable(name=”post_plusoners”) private List plusoners; @ElementCollection @CollectionTable(name=”post_shared_with”) private List sharedWith; } 查询方法(所有人都挤在一起使其可用): @Override public Page […]

org.hibernate.AnnotationException:referencedColumnNames引用未映射到单个属性

我在2个实体之间映射一对一时遇到了以下exception。 第一个实体嵌入了复合键。 第二个实体也有嵌入式复合键。 这些表是遗留系统的一部分。 数据持平,关系定义不明确。 请帮忙。 Caused by: org.hibernate.AnnotationException: referencedColumnNames(FLAG_NAME) of net.javabeat.spring.model.ReferralsM.mnEditFlag referencing net.javabeat.spring.model.MnEditFlag not mapped to a single property at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:205) at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116) at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1515) at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1440) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1358) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1727) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1778) at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509) … 34 more 这是我在主/父表中的一对一映射。 @OneToOne(targetEntity = MnEditFlag.class, fetch = FetchType.LAZY) @JoinColumn(name […]

如何在jpql中为in-clause设置集合项?

JPA 2.0中是否有可能在jpql-query中为in-clause设置集合? (我正在使用EclipseLink) 下一个示例失败: TypedQuery q = em.createQuery(“select p from Person p where p.name in (?1)”, Person.class); List names = Arrays.asList(new String[] { “Bill Gates”, “Steve Jobs” }); // THIS FAILS q.setParameter(1, names); List persons = q.getResultList(); for (Person p: persons) { System.out.println(p.getName()); } 还有另一种方法吗?

如何在JPQL语句中使用typcasting?

我在数据库中有两个Integer列(derby和db2)。 我需要在JPQL它们相互分开。 如果余数是十进制数,则两个类型为Integer列返回零,例如0.25变为0等,因为类型为int,因此可以理解。 在SQL我可以这样做 select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable; 但是什么是JPQL等价物。 一个选项可能是(我还没有尝试过)是在实体中有一个@Transient方法返回Decimal类型并在那里进行计算并将其传递给JPQL但我宁愿让SQL执行此操作。 Mysql不需要在数据库级别进行转换。 所以不同RDBMS的行为是不同的,这很好。 但是,JPQL应该如何处理需要使用本机查询来知道此操作需要强制转换为十进制。 添加方言也没有修复它。 请注意它是JPA1

在Spring数据JpaRepository方法问题中的Pageable和@Param

我有一个以下的存储库: public interface MilestoneRepository extends JpaRepository { @Query(“select m from Milestone m where m.date <= :date order by m.date desc") Page findLeftClosest(@Param(“date”) Date date, Pageable pageable); } 定义如上所述工作正常,但如果我切换参数顺序: public interface MilestoneRepository extends JpaRepository { @Query(“select m from Milestone m where m.date <= :date order by m.date desc") Page findLeftClosest(Pageable pageable, @Param(“date”) Date date); } 我在上下文初始化时遇到以下exception(发布最有趣的底层原因): […]

无法通过reflectionhibernate获取字段值

在jpa中更新对象时遇到问题 我有bean用户 public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = “id”, unique = true, nullable = false) private Long id; @Column(name = “name”, nullable = false) private String name; @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name = “fk_program_rating”) private List ratingList = new ArrayList(); } 和 public class Rating extends BaseModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) […]