Tag: hibernate

测试DAO时出错:sun.reflect.generics.reflectiveObjects.TypeVariableImpl无法强制转换为java.lang.Class

我是Spring + Hibernate的新手,我正在运行测试,看看我的DAO是否正常工作。 我收到以下错误,在Google上搜索会产生很多不同的答案(主要是拼写错误,我已经检查过)。 我希望你能帮我解决这个问题: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:220) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:301) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:303) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199) at […]

我不能在我的代码中使用findOne()方法

我的应用程序中有错误,因为我使用了findOne()方法。 在我的简单代码下面。 在User类中,我的id是String email,而我正在尝试在我的类UserService中使用id,如下所示: public User findUser(String email){ return userRepository.findOne(email); } 但我有这个错误: 接口org.springframework.data.repository.query.QueryByExampleExecutor中的方法findOne不能应用于给定的类型; 必需:org.springframework.data.domain.Example 发现:java.lang.String 原因:无法推断类型变量S(参数不匹配; java.lang.String无法转换为org.springframework.data.domain.Example) 用户类: @Entity @Data @Table(name = “User”) public class User { @Id @Email @NotEmpty @Column(unique = true) private String email; @NotEmpty private String name; @NotEmpty @Size(min = 5) private String password; @OneToMany(mappedBy = “user”, cascade = CascadeType.ALL) private List […]

Hibernate – 它改变了数据库的结构吗?

我正在Spring上用java构建更大的项目,很多人都建议我使用hibernate来轻松访问数据库。 问题是,我必须使用此项目以前版本的数据库,以前是用PHP编写的,所以他们没有使用hibernate。 我已经阅读了一些关于hibernate的内容,但我仍然不确定一件事 – 它是否必须改变数据库的结构,或者我可以使用标准的MySQL数据库与int,varchar和其他类型中的存储值,并使用hibernate在我的java代码中摆脱很多SQL?

在自动触发的默认侦听器之前,激活Hibernate自定义事件侦听器

我创建了一个自定义的Hibernate事件监听器,扩展了org.hibernate.event.PreInsertEventListener。 自定义侦听器会覆盖onPreInsert方法,并在使用DAO将其保存到DB之前设置“Contact”实体的字段。 问题是,在侦听器为其赋值之前,该字段为null,并且在我的自定义侦听器之前自动触发默认的hibernate事件侦听器。 当他们检查ddl时,他们会看到字段上的not-null约束,并在让我的自定义事件侦听器为字段赋值之前抛出空检查exception。 (当使用spring AOP而不是hibernate自定义侦听器时会发生同样的问题:默认的hibernate侦听器在我的aspect方法之前执行) 因此,有可能在知道我使用spring会话工厂的情况下调整hibernate监听器的触发顺序吗? 谢谢

Hibernate @Where子句

我有User类,它有组。 @Where(clause = “enabled = 1 and deleted = 0”) @Fetch(FetchMode.SUBSELECT) public Set getGroups() { return groups; } 但是当我试图在已经存储在DB中并且不适合@Where子句的Group上进行某些操作时,Hibernate只是忽略了我。 实际上, @Where我不是我的决定,但我能找到克服这一点的解决方案(创建另一个dao方法来执行某些操作)是如此丑陋。 那么,有没有办法克服这个? 还是我错过了什么? 谢谢您的帮助。

Hibernate实体存储为HttpSession属性值

我正在处理一个带有大量相当混乱的代码库的遗留Java应用程序。 有一个相当标准的“用户”对象存储在请求之间的HttpSession中,因此servlet在顶部执行如下操作: HttpSession session = request.getSession(true); User user = (User)session.getAttribute(“User”); 旧的用户身份validation层(我将不会描述;足以说,它没有使用数据库)正被替换为使用Hibernate映射到数据库的代码。 所以’User’现在是一个Hibernate实体。 我对Hibernate对象生命周期的理解有点模糊,但似乎在HttpSession中存储’User’现在成为一个问题,因为它将在下一个请求期间在不同的事务中被检索。 在这里做什么是正确的? 我可以使用Hibernate Session对象的update()方法在下次重新附加User实例吗? 我需要吗?

具有LEAST和GREATESTfunction的JPA CriteriaQuery

我有一个问题,我需要使用LEAST和GREATEST函数连接两个表,但使用JPA CriteriaQuery。 这是我想要复制的SQL … select * from TABLE_A a inner join TABLE_X x on ( a.COL_1 = least(x.COL_Y, x.COL_Z) and a.COL_2 = greatest(x.COL_Y, x.COL_Z) ); 我看过CriteriaBuilder.least(..)和最大的(..) ,但是我很难理解如何创建Expression以传递给任一函数。

Java应用服务器性能

我在Sun Application Server 8.1(又名SJSAS,Glassfish的前身)上运行了一个有点过时的Java EE应用程序。 有500多个并发用户,应用程序变得非常缓慢,我正在尝试帮助确定大部分执行时间花在哪里以及可以采取哪些措施加快速度。 到目前为止,我们一直在使用LoadRunner,应用服务器日志,Oracle statpack,snoop,调整应用服务器接受器和会话(工作线程)线程,调整Hibernate批量大小和连接获取使用等进行实验和测量,但经过一些初步收益我们正在努力改善问题。 好的,通过对问题的介绍,这里有一个真正的问题:如果你的CPU和内存使用从未超过20%的盒子上运行的Java EE应用程序速度慢,而且在运行500多个用户时你会看到两件事:1)在相同的应用服务器JVM进程中请求甚至静态文件的速度非常慢,2)请求在应用服务器JVM进程之外但在同一个盒子上的静态文件很快,你会调查什么? 我的想法最初跳到应用程序服务器线程,包括接受器和会话线程,认为即使对静态文件的请求正在排队,等待可用的线程,如果CPU /内存没有真正征税,那么更多的线程按顺序排列。 但随后我们大幅提升了接受者和会话线程,并没有任何改进。 澄清编辑: 1)静态文件应由Web服务器而不是app服务器提供。 我使用的事实是,在我们的情况下,这(不幸的是)不是配置,以便我可以看到它不执行的文件的应用程序服务器性能 – 因此排除任何数据库性能成本等。 2)我认为请求者和应用服务器之间没有代理,但即使它没有被重载,因为从同一应用服务器机器请求但在应用程序的JVM实例之外的静态文件立即返回。 3)JVM堆大小(Xmx)设置为1GB。 谢谢你的帮助!

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 = […]

使用sql查询在hibernate中创建一个新的对象实例

我试图使用查询在hibernate中创建一个对象,然后将其保存回表示该类的表中。 摘自hbm.xml文件: MY_SEQ SELECT MY_SEQ.nextval ID, ‘something’ VAL from DUAL 测试用例的代码片段: MyClass myClass = (MyClass) session.getNamedQuery(“myQuery”).list().get(0); Transaction t = session.beginTransaction(); session.save(myClass); t.commit(); 我的目标是,现在应该在表MY_TABLE中有一个新记录,但插入不会发生,我认为这是因为Hibernate不知道实例没有在db中持久存在。 我试过将查询更改为: SELECT NULL ID, ‘something’ VAL from DUAL 但这导致Hibernate没有实例化对象。 那么如何从与该类的持久化实例无关的查询创建一个新的对象实例,并使用它来创建一个持久化的实例?