java - Spring - AutoWired 对象 NullPointerExpection、序列生成器

标签 java spring oracle hibernate spring-mvc

我们有以下错误

java.lang.NullPointerException
at sequence.MySequence.generate(MySequence.java:23)

我的序列生成器

    @Component
    public class MySequence implements IdentifierGenerator {

    @Autowired
    SequenceDAO sequenceDAO;

    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {

        <-- sequenceDAO.getNextValue -->

        return sequenceNextValue;
    }
    }

序列DAO

    public interface SequenceDAO {

    Long getNextValue();

    }

序列DAOImpl

    @Repository
    @Transactional(readOnly = false)
    public class SequenceDAOImpl implements SequenceDAO {

    @Autowired
    SessionFactory sessionFactory;

    @Override
    @Transactional(readOnly = true)
    public Long getNextValue() {

        <-- getNextValue -->

        return nextValue;
    }
    }

配置

<context:annotation-config />
<context:component-scan base-package="controller" />
<context:component-scan base-package="dao" />
<context:component-scan base-package="service" />
<context:component-scan base-package="sequence" /> <-- is there MySequence

我不知道我做错了什么。 Controller 、服务、DAO 正常工作,@autowired 正常工作。只是在这里我不知道为什么会发生。

序列生成器所需的一切(Oracle 数据库将 id 作为字符串; 因此我不能直接使用数据库中的生成器)

@Id
@GenericGenerator(name="seqid", strategy="sequence.MySequence")
@GeneratedValue(generator="seqid")
@Column(name = "ID", unique = true, nullable = false, length = 32)
public String getId() {
    return this.id;
}

有什么建议吗?

最佳答案

生成器类是由Hibernate实例化的,因此它不受spring管理,也不会发生注入(inject)。您必须在 generate() 方法中直接实现 SequenceDAO 中的代码(您在参数中收到一个 session ,您可以从中执行查询)或找到一个平均值通过静态方法访问 spring 内容并从中获取您的 SequenceDAO

关于java - Spring - AutoWired 对象 NullPointerExpection、序列生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25362262/

相关文章:

java - Spring 4 MVC 区域设置已更改,但 JSP 对此没有响应

spring - 在 Spring 3 Controller 中返回字符串时为重定向设置 HTTP 状态代码

application.yml中的Spring自定义参数

java - 使用 JDBC 绑定(bind)函数调用

Java 目标/选择类/对象 - 困惑(抱歉标题不好)

用于运行应用程序的 Java 代码

sql - 在同一 SQL 查询中使用 "WITH"和 "UPDATE"语句

java - 如何从 weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 获取字符串?

java - 在 jar 之外找不到资源

java - 如何在回合制战斗java中重复while循环?