小编Dat*_*eus的帖子

带注释的Spring + Hibernate:没有Hibernate会话绑定到线程

我是Spring的新手,我正在尝试使用以下堆栈创建一个webapp:Apache Tomcat 7,MySQL,Spring MVC,带有JPA注释的Hibernate 3.

我正试图通过遵循Craig Walls的"Spring in Action,第三版"一书来学习.

首先,我想创建一个页面,显示我手动添加到我的数据库中的一些条目,但看起来我的应用程序无法从SessionFactory创建/检索任何Hibernate会话.这是我的根本原因堆栈跟踪:

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
    org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)
    com.nbarraille.www.dao.HibernateContactDAO.listContact(HibernateContactDAO.java:27)
    com.nbarraille.www.controllers.HomeController.showHomePage(HomeController.java:24)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:613)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Run Code Online (Sandbox Code Playgroud)

这是我关心的Classes/Config文件:

我的HibernateDAO:

@Repository
public …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate sessionfactory

8
推荐指数
1
解决办法
3万
查看次数

从模式生成jaxb类

我试图在eclipse中使用Jaxb类生成器从我的模式生成jaxb类.我收到以下错误:

"此项目的类路径似乎不包含继续生成类所需的库.请确保类路径上有JAXB实现."

我怎么解决这个问题?

java eclipse jaxb

8
推荐指数
2
解决办法
2万
查看次数

在Hibernate中通过ID获取对象

我注意到我们的高级开发人员使用以下代码按ID检索实体:

@Override
public Source get(Long id) {
    Session session = getSession();
    if( session == null )
        session = sessionFactory.openSession();
    final Source source = (Source)session.load(Source.class, id);
    Hibernate.initialize(source);
    return source;
}
Run Code Online (Sandbox Code Playgroud)

这段代码有什么好处?

为什么不简单写作

return (Soruce) getSession().get(Source.class, id);
Run Code Online (Sandbox Code Playgroud)

java orm hibernate

8
推荐指数
1
解决办法
1万
查看次数

如何让Hibernate调用我的自定义typedef?

我正在尝试定义一个CompositeUserType来处理我的JPA/Hibernate应用程序中的特定类型.我有一个名为ApplicationMessageType的CompositeUserType,用于处理我的映射.

根据我读过的内容,我应该能够在包含TypeDef的域层次结构中创建一个package-info.java类.我看起来像这样:

@TypeDefs({
    @TypeDef(
        defaultForType = ApplicationMessage.class,
        typeClass = ApplicationMessageType.class
    )
})
package mptstp.domain;

import mptstp.domain.messages.ApplicationMessage;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,我正在使用DefaultDeType参数到TypeDef这一事实,无论何时我尝试保存或加载ApplicationMessage,都应该调用自定义类型代码.

我已经在ApplicationMessageType类中的每个方法上设置了断点,并且没有一个 被调用.

有谁知道我哪里出错了?代码编译,但似乎从未调用TypeDef注释来注册ApplicationMessageType.

任何指针将不胜感激......

谢谢

annotations hibernate typedef hibernate-annotations

7
推荐指数
1
解决办法
1万
查看次数

OSGi + JPA(postgresql)

我试图在OSGi中使用JPA并遇到这个异常:

 javax.persistence.PersistenceException: No Persistence provider for EntityManager named test 
Run Code Online (Sandbox Code Playgroud)

在META-INF中有简单的实体类,文件"persistence.xml":

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>org.test.Room</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test"/>
      <property name="javax.persistence.jdbc.password" value="12345"/>
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
      <property name="javax.persistence.jdbc.user" value="postgres"/>

    </properties>
  </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

激活:

package org.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

    private static BundleContext context;
    static BundleContext getContext() {
        return context;
    }

    public void start(BundleContext bundleContext) throws Exception {
        Activator.context = bundleContext; …
Run Code Online (Sandbox Code Playgroud)

postgresql osgi jpa eclipselink

7
推荐指数
1
解决办法
3133
查看次数

SpringData:是否可以在Query注释中包含子查询?

我想知道是否可以在@Query注释中使用子查询(org.springframework.data.jpa.repository.Query;)

我在第一个子查询parentesis上得到QuerySyntaxException.

这是我的查询

@Query(value="select c1 from ComplaintModel c1, "
+ "(select c2.id, min(cb.termDate) minDate from ComplaintModel c2 "
+ "join c2.complaintBullets cb join cb.status s where s.code = ?1 "
+ "group by c2.id) tmp where c1.id = tmp.id order by tmp.minDate")
Run Code Online (Sandbox Code Playgroud)

谢谢!

java jpql spring-data

7
推荐指数
2
解决办法
2万
查看次数

重置h2中的自动增量

我正在测试一个返回json响应的控制器但是第一次测试失败,因为h2数据库没有重置自动增量id.手动使用夹具或创建对象也存在同样的问题.

@Before
public void setUp() {
    Fixtures.deleteAllModels();
    Fixtures.loadModels("data.yaml");
}
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

java h2 playframework

7
推荐指数
2
解决办法
9836
查看次数

未知的抽象模式类型

基于axtavt的答案,这几乎肯定是Notebean和NoteBean之间的命名问题.这里有一个特定的惯例,只是正常的CamelCase吗?

我相信我已经更新了实体中的@NamedQuery注释,并且正在使用来自控制器的注释,并且名称看起来匹配,但我仍然收到关于模式的相同错误,我无法获得更多信息上.

JPA控制器:

package net.bounceme.dur.nntp.controller;

import java.util.*;
import java.util.logging.Logger;
import javax.mail.Message;
import javax.persistence.*;
import javax.swing.DefaultListModel;
import net.bounceme.dur.nntp.model.NoteBean;

public class NotesController {

    private static final long serialVersionUID = 1L;
    private static final Logger LOG = Logger.getLogger(NotesController.class.getName());
    private Message message;
    private List<NoteBean> notes = new ArrayList<NoteBean>();
    private DefaultListModel defaultListModel = new DefaultListModel();
    private EntityManagerFactory emf;
    private EntityManager em;
    private String PERSISTENCE_UNIT_NAME = "nntpPU";

    public NotesController() {
        emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        em = emf.createEntityManager();
        LOG.info("entity manager made???" + em.isOpen());
        populateList();
    }

    private void populateList() …
Run Code Online (Sandbox Code Playgroud)

java mysql database-design toplink jpql

7
推荐指数
1
解决办法
1万
查看次数

有没有办法在EclipseLink中禁用@AdditionalCriteria?

例如,在EclipseLink中使用@AdditionalCriteria很容易过滤掉软删除的实体,但有没有办法在执行特定查询之前暂时禁用它?

eclipselink

7
推荐指数
1
解决办法
1637
查看次数

获取Javassist类型而不是实际的Hibernate实体类型

我偶然发现了一个非常烦人的情况:我使用Hibernate和Spring作为我的应用程序的后端,似乎在某些情况下,与特定实体关系的实体不会从DB获取为正常的实体对象,但作为Javassist类型.例如:

我的Campaign实体具有以下关系:

@Entity
@Table(name = "campaign")
public class Campaign implements Serializable {
  [..]
  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
        "campaign_id", "dealer_id" }), name = "campaign_has_dealer", joinColumns = { @JoinColumn(name = "campaign_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "dealer_id", nullable = false) })
  private List<Dealer> dealers = new ArrayList<Dealer>();

@ManyToMany
// (fetch = FetchType.LAZY)
@JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
        "campaign_id", "sales_area_id" }), name = "campaign_has_sales_area", joinColumns = { @JoinColumn(name = "campaign_id", nullable = false) }, inverseJoinColumns …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate javassist

6
推荐指数
1
解决办法
1万
查看次数