我们有以下错误
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/