Tag: orm

Hibernate JPA一对一保存子类实体

我使用在父方注释的PrimaryKeyJoinColumn一对一的关系。 现在我想自己保存子实体。 例如,我有Employee和EmpInfo作为子实体,我需要保存EmpInfo (当然在设置父项的id属性之后)。 但是,当使用这样的安排时,我得到下面列出的例外…… org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist 有什么想法为什么hibernate不允许这个? 为了更清楚,我的代码如下…… ParentEntity: public class Employee { private Long id; private String name; private EmployeeInfo info; private Integer enumId; @Id @GeneratedValue(strategy=GenerationType.AUTO) public Long getId() { return id; } @Column(name=”EMP_NAME”) public String getName() { return name; } @PrimaryKeyJoinColumn @OneToOne(cascade = CascadeType.REMOVE) public EmployeeInfo getInfo() { […]

在WebLogic中运行时ClassNotFoundException(HqlToken)

我有一个.war文件,用于通常在Jetty中正常运行的应用程序。 我正在尝试将应用程序移植到WebLogic中运行,但在启动时我遇到了以下exception: ERROR:Foo – Error in named query: findBar org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from Bar] at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:80) at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340) at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:54) at antlr.CharScanner.(CharScanner.java:51) at antlr.CharScanner.(CharScanner.java:60) at org.hibernate.hql.antlr.HqlBaseLexer.(HqlBaseLexer.java:56) at org.hibernate.hql.antlr.HqlBaseLexer.(HqlBaseLexer.java:53) at org.hibernate.hql.antlr.HqlBaseLexer.(HqlBaseLexer.java:50) … 解决这个问题的最佳方法是什么? 我正在使用Hibernate 3.3.1.GA和WebLogic 10.3.2.0。

使用@MappedSuperclass注释的类上的@SequenceGenerator

我有以下我的实体结构: @MappedSuperclass public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “seqGenerator”) private Long id; } @MappedSuperclass @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @SequenceGenerator(name = “seqGenerator”, sequenceName = “DICTIONARY_SEQ”) public abstract class Intermed extends BaseEntity {} @Entity public class MyEntity1 extends Intermed {} @Entity public class MyEntity2 extends Intermed {} 我得到以下例外: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating […]

Hibernate使用条件执行更新

在Hibernate使用Criteria是否可以执行更新? 例如: Session session = getSession(); Criteria crit = session.createCriteria(User.class); crit.add(Restrictions.eq(“token”, sessionToken)); User user= new User(); Transaction tx = session.getTransaction(); try { tx.begin(); session.updateWithCriteria(user, crit); //my imaginary function tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } session.close();

JPA @TableGenerator在多个实体之间共享

我有一个带有@Id和@TableGenerator的’dog’Entitiy … @TableGenerator(table = “seq”, name = “dog_gen”, pkColumnName = “seq_name”, valueColumnName=”seq_val”) @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = “dog_gen”) private Long id; … 有没有办法在其他实体中重用相同的表生成器(dog_gen)? 我想在两个独立的实体中保持相同的id序列 dog = 1,dog = 2,dog = 3,cat = 4,cat = 5,dog = 6等等…… 两个实体不共享一个公共超类,以使用id属性实现某种inheritance。 如果我在我的cat实体上添加@GeneratedValue(generator =“dog_gen”) ,省略@TableGenerator声明会抛出一个exception,说它在启动上下文时找不到生成器。 Caused by: org.hibernate.AnnotationException: Unknown Id.generator: dog_gen at org.hibernate.cfg.BinderHelper.makeIdGenerator(BinderHelper.java:413) at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1795) at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1229) at […]

为什么使用带有Oracle 10g方言的Hibernate使用JPA创建一个名为hibernate_sequence的序列?

我的所有实体都使用这种类型的@Id @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “MYENTITY_SEQ”) @SequenceGenerator(name = “MYENTITY_SEQ”, sequenceName = “MYENTITY_SEQ”) @Column(name = “MYENTITY”, nullable = false) private Long id; 要么 @Id @Column(name = “MYENTITY”) 我发现总是创建一个名为hibernate_sequence的Oracle序列。 为什么会这样? 我怎么能避免这个? 我正在使用JPA1和Hibernate 3以及Oracle 10g方言。

添加到集合时不会触发PreUpdate

我有一个JPA注释类,其中包含如下集合: @Entity public class Employee { @Id private int id; @Basic private String name; @OneToMany @JoinTable(name = “ORG”, joinColumns = @JoinColumn(name=”MINION”), inverseJoinColumns = @JoinColumn(name=”EMP”)) private List minions = new ArrayList(); @PreUpdate public void preUpdate(){ … } } 我所看到的是,如果我有一个托管的Employee实体,并且我添加了它的preUpdate集合,则不会调用preUpdate方法。 在DB中的映射表中添加了一个新行,因此我知道更新正在进行中。 如果我直接在Employee上更改属性(如name),则preUpdate会在提交事务时按预期触发。 有没有办法在修改映射集合时触发PreUpdate? 或者是否有其他技术或Hibernate特定注释用于检测何时发生?

MySQL / Hibernate – 如何调试不断丢弃的MySQL池连接?

几个月来,我的Web应用程序运行顺利,但在过去一两周内,它一直在断开与MySQL服务器的连接。 我不是DBA的人,也不知道如何调试它。 这就是我所知道的: 连接似乎每隔几个小时就会消失。 有时在白天,但总是在夜间。 我的实验室有一个MySQL服务器,可托管多个应用程序的数据库 目前,我们有47个与MySQL服务器的连接。 据我所知,没有其他应用程序遇到此问题。 我的应用程序使用相同的堆栈,配置甚至代码连接到数据库作为另一个应用程序 – 这个其他应用程序每天支持大约200个用户,并且自2013年以来一直运行顺利。 两个应用程序都使用Hibernate ORM; 这是我所知道的唯一配置: org.hibernate.connection.TomcatJDBCConnectionProvider org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver 5 thread SELECT 1 true true 该问题与有人试图使用应用程序的RESTful API下载数据的时间大致相同。 这个用户 – 实际上是一个协作者 – 有一个小脚本迭代特定表中的每一行并请求所有元数据。 这个问题也开始于我的实验室开始提供Coursera Massive Open Online课程的同时。 我不知道这些数字是什么,但网站上的实际使用量必须已经增加。 我知道这是一个广泛的问题,但我真的不知道如何进行调试。 任何建议表示赞赏。 编辑: 挖掘其他应用程序的ServletContextListener ,我发现我的contextDestroyed函数没有的这段代码: // TODO: Find memory leak that requires server to be restarted after hot deploying several […]

Hibernate UnknownServiceException:在事务完成时请求未知服务

我有一个简单的类,它启动3个线程并在每个线程中保存一个新对象。 但是我得到了一些我无法理解的exception。 任何人都可以帮助我理解为什么例外? package test; import java.util.Date; import org.hibernate.Session; import domain.Event; import util.HibernateUtil; public class EventBeanTest { public static void main(String [] args) { Event e1 = new Event(); e1.setTitle(“111”); e1.setDate(new Date()); Event e2 = new Event(); e2.setTitle(“222”); e2.setDate(new Date()); Event e3 = new Event(); e3.setTitle(“333”); e3.setDate(new Date()); Thread t1 = new Thread(new EventRunnable(e1)); Thread […]

JPA:外键注释

我有两个数据库实体: Forum和Topic 。 Topic已经protected long forumId数据成员,这当然表明了Topic论坛。 我的问题是这个数据成员使用的注释是什么?