相关疑难解决方法(0)

Hibernate:"字段'id'没有默认值"

我正面临着我认为Hibernate的一个简单问题,但无法解决它(Hibernate论坛无法访问肯定没有帮助).

我有一个简单的课程,我想坚持,但继续得到:

SEVERE: Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem]
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    [ a bunch more ]
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
    [ a bunch more ]
Run Code Online (Sandbox Code Playgroud)

持久化类的相关代码是:

package hibtest.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Mensagem  {
    protected Long id;

    protected Mensagem() { }

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
} …
Run Code Online (Sandbox Code Playgroud)

java persistence hibernate jpa

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

为什么DispatcherServlet会创建另一个应用程序上下文?

我已使用ContextLoaderListener和上下文init-parameter 配置了根应用程序上下文contextConfigLocation.

然后由JSF(*.jsf)变量解析器访问根上下文.它工作正常.

现在的问题是,通过的请求(*.do)DispatcherServlet将获得另一个应用程序上下文,然后单例bean被实例化两次.

我不需要另一个应用程序上下文DispatcherServlet,我如何指定它来重用现有的根应用程序上下文ContextLoaderListener

注意

在阅读了答案中的参考页面后,我知道根上下文和调度程序上下文之间存在上下文分离,但没有一个引用告诉我去哪里.所以这是我的解决方案,可能对面临类似问题的其他人有帮助:

  1. 在调度程序servlet的上下文配置XML中:dispatcher-servlet.xml,我<context:component-scan/>已经定义了重复,这已经在根上下文中定义.所以删除它.该dispatcher-servlet.xml只需要定义仅用于Spring MVC的那些豆子.

  2. 所有控制器都已在根上下文中进行扫描和实例化,但是,默认情况下,Spring MVC不会在根上下文中注册控制器以进行请求映射.你可以:

    2.1.在根上下文中,@Controller从dispatcher-servlet.xml中排除<component-scan>,@Controller仅扫描.

    2.2.或者,将属性设置DefaultAnnotationHandlerMapping.detectHandlersInAncestorContexts为true:

    (dispatcher-servlet.xml:)
    
    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="detectHandlersInAncestorContexts" value="true" />
    </bean>
    
    Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc

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

Spring事务没有回滚异常(Oracle JNDI数据源)

我在Spring MVC 3.1项目中使用基于注释的事务,并且在抛出异常时我的事务没有被回滚.

这是我的服务代码


@Service
public class ImportService {

    @Autowired
    ImportMapper importMapper;

    @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
    public void processImport() throws ServiceException, DatabaseException {
        iImport import = new Import();

        createImport(import);

        throw new ServiceException("");         
    }

    @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
    private void createImport(Import import) throws DatabaseException {
        try {
            importMapper.createImport(eventImport);
        } catch (Exception e) {
            throw new DatabaseException(e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

因此,希望在抛出异常后回滚createImport方法.但不幸的是,事实并非如此.

我在服务器context.xml中定义我的数据源

<Resource name="datasource.import" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           username="user" password="password" driverClassName="oracle.jdbc.driver.OracleDriver"
           url="jdbc:oracle:thin:@INFO" />
Run Code Online (Sandbox Code Playgroud)

我正在寻找JNDI:

<jee:jndi-lookup id="dataSource" jndi-name="datasource.import"/>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" /> …
Run Code Online (Sandbox Code Playgroud)

oracle jndi spring-mvc

5
推荐指数
1
解决办法
1311
查看次数

春天和@transactional,这是正常的吗?

我写了这个简单的例子:

//file TestController.java
public interface TestController {

    public List<Test> findAll();

}

//file TestControllerImp.java
@Controller
public class TestControllerImp implements TestController{

    @Autowired
    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory=sessionFactory;
    }

    public List<Test> findAll() {
        return sessionFactory.getCurrentSession().createQuery("from Test").list();
    }

}

//file TestService.java
@Service
public class TestService {

    @Autowired
    private TestController controller;

    public boolean flag=true;

    public void setController(TestController controller){
        this.controller=controller;
    }

    @Transactional
    public List<Test> useController(){
        flag=false;
        return controller.findAll();
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

TestService s1=context.getBean(TestService.class);
TestService s2=context.getBean(TestService.class);
List<Test> list=s1.useController();
System.out.println(s1.flag+"  "+s2.flag);
Run Code Online (Sandbox Code Playgroud)

现在奇怪的行为(即时通讯非常新的春天):

  1. 如果我声明@Transactional …

java spring hibernate transactional

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

标签 统计

java ×3

hibernate ×2

spring ×2

spring-mvc ×2

jndi ×1

jpa ×1

oracle ×1

persistence ×1

transactional ×1