Tag: jpa

JPA / Hibernate双向多对一导致StackOverflowException

我有实体User和GrantedRole具有双向一对多关系。 当我尝试将GrantedRole添加到Set in User时,没有抛出exception,但是当我调试User和GrantedRole对象的变量时,会有一个读取的描述 com.sun.jdi.InvocationException发生了调用方法。 调试时可以读取变量的不同字段,但是当我选择User中的角色字段或GrantedRole中的用户字段时,我得到与上面相同的描述。 当我进入用户的Set of GrantedRole时,我最终找到以下描述: 详细格式化程序错误:发生exception:java.lang.StackOverflowError 我的代码: public class User { private Set roles = new HashSet(); public User() { super(); } public User(String name, String password) { this.name = name; this.password = password; } @OneToMany(fetch = FetchType.EAGER, mappedBy = “user”) public Set getRoles() { return roles; } public void setRoles(Set […]

如何使用带有Oracle 10g方言的Hibernate使用JPA生成我的id?

我有一些代码: @Id @SequenceGenerator(name = “SOMETHING_SEQ”) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “SOMETHING_SEQ”) @Column(name = “SOMETHING”, nullable = false) private Long id; hibernate如何提供我的身份? 我在我的数据库中看到一个名为’hibernate_sequence’的序列,没有其他hibernate’特殊表’。

我应该将时区与Postgres和JDBC的时间戳分开存储吗?

似乎(也许我错了)如果你想保留JDBC和Postgres发生事件的时区,你需要将时区与时间戳分开存储。 那就是我更愿意给我的ORM / JDBC / JPA一个Java Calendar (或Joda DataTime ),比如说timezone America/New_York到Postgres timestampz字段。 并且我希望无论服务器时区(或默认为UTC)检索都能给我带回时区America/New_York的Calendar 。 但只是查看大多数JDBC代码(以及依赖于它的事情不会发生)。 它是否正确? 当postgres支持时,我需要将tz存储在另一个字段中,这似乎很荒谬。 因此,似乎只有两个选项: 选择timestampz Postgres列作为java.util.String并解析它。 将时区存储为单独的字段。 第一和第二选项需要某种转换拦截器用于我的SQL映射/ ORM库。 什么是JDBC的最佳解决方案? JPA的最佳解决方案是什么(如果与JDBC不同)?

有没有办法减少与CriteriaQuery相关的样板代码量(在JPA 2.0中)?

我喜欢类型安全CriteriaQuery带来的JPA 2.0,但它也带来了一些锅炉板代码。 例如,假设我有一个名为NamedEntity的实体,它只有一个id和一个名为“name”的String字段(假设它将唯一约束设置为true)。 以下是NamedEntityManager的外观: public class NamedEntityManager { //inject using your framework EntityManager entityManager; //retrieve all existing entities of type NamedEntity from DB public Iterable queryAll() { CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery query = builder.createQuery(NamedEntity.class); return entityManager.createQuery(query).getResultList(); } //retrieve a single entity of type NamedEntity from DB using specified name public NamedEntity queryByName(String name) { […]

@ManyToOne JPA关系可以为null吗?

我有一个表有另一个表的外键(多对一关系)但我希望它可以为空。 像这样的东西: public class SubType() { @Id @GeneratedValue(generator = “system-uuid”) @GenericGenerator(name = “system-uuid”, strategy = “uuid”) private String id; } public class TopUp { @Column(nullable = true) @ManyToOne(optional = false, fetch = FetchType.LAZY) private SubType subType; } 但是@Column(nullable = true)抛出NullPointerException并且说子类型不能为null。 有没有办法让ManyToOne接受null?

使用JPA(Hibernate)查找包含给定记录的页面

如何知道JPA查询中记录的位置? 我有一个服务返回分页结果,或多或少实现了一个带有此签名的方法: List getRecordsPage(long page, int pageSize); 调用它时,我只需创建一个查询并进行如下配置: TypedQuery query = entityManager.createQuery(criteriaQuery); query.setFirstResult(page * pageSize); query.setMaxResults(pageSize); 这会将结果分页。 这是按预期工作的,非常简单。 问题 我的另一个要求是实现一个方法来检索包含特定记录的页面。 使用以下签名实现方法: List getRecordsPage(Record record, int pageSize); 此方法需要生成记录所在的右页。 例如,对于getRecordsPage(RECORD4, 2)调用,考虑数据库状态: 1. RECORD1 2. RECORD2 3. RECORD3 4. RECORD4 5. RECORD5 返回的页面应为2,包含[RECORD3, RECORD4] 。 ORDER BY参数始终设置,可以是多个字段。 解决方案直到现在 到目前为止,我有一些解决方案: 一点也不好,但它解决了这个问题: 使用提供的查询,我只选择没有分页的id,只执行indexOf以找到它的位置,并根据我可以找到记录页面的位置,然后使用getRecordsPage(long page, int pageSize)执行常规过程getRecordsPage(long page, int pageSize)已经实施。 不太好,因为与数据库高度耦合: […]

如何强制初始化Hibernate JPA代理以在JSON调用中使用它

我有一个Spring 3 + JPA 2.0应用程序。 在我的@Controller我需要一个初始化对象,但我有代理,我需要能够以编程方式初始化它。 我需要类似于org.hibernate.Hibernate.initialize(Object) 。 有人可以帮忙吗 该对象用于AJAX操作。 如果属性是代理,我不能将其作为JSON发送

如何在Netbeans中使用Eclipse-Link JPA应用静态编织Ant任务?

我使用的是Netbeans 7.1.1和Glassfish 3.1.2服务器。 作为JPA提供商,我决定使用随Netbeans一起提供的eclipse-link 2.3.0。 由于我想使用延迟抓取,我的项目由大约45个JPA实体类组成,它们之间有很多关系,所以我决定使用静态编织 。 此外,@ Entity类位于单独的Class Lib项目中,而persistence.xml驻留在EJB项目中。 我已按照此处的说明操作: http : //wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Static_Weaving 我将ant-task放入build-impl.xml文件(如下)。 使用Netbeans时这是正确的吗? 这是build-impl.xml的片段: pathelement路径中的所有jar文件也作为库包含在Netbeans IDE中。 点击“清理和构建”时,我现在收到以下错误: D:\workspace\MyProject\nbproject\build-impl.xml:703: taskdef class org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask cannot be found using the classloader AntClassLoader[] 我在这里弄错了什么?

CollectionOfElements上的java.util.ConcurrentModificationException

当我在Embedabble中有一个CollectionOfElements时,我似乎得到一个ConcurrentModificationException。 如果想拥有它,那么如果我将Route从Embedabble改为Entity,那么一切正常。 我甚至尝试过添加@Version,但这似乎不起作用。 这是我的课程片段。 Kart.java: @Entity public class Kart { @Id @GeneratedValue private Long id; @Column(nullable=false,length=256) @NotNull @Length(max=256) private String name; @OneToOne(cascade=CascadeType.ALL) private File file; @Version private int version; @CollectionOfElements private Set route; Route.java: @Embeddable public class Route { @Parent private Kart kart; @NotNull @Column(nullable = false, length = 256) private String name; @NotNull @Column(nullable […]

在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是确保合并发生的唯一方法。 有更好的做法吗? 这种方法有特殊的缺点,以后会咬我吗? 谢谢参观!