我正在使用netbeans 7.2,postgres sql,jpa2,hibernate 4.2。
我刚创建了一个新的maven简单java项目(不是webapp)。
但是我已经完成了hibernate和jpa的设置,但autowire“ wpService ”得到了null(不确定是否是由hibernate配置引起的)。
这里是我的项目文件(innovax.rar),如果你想测试的话。 https://skydrive.live.com/#cid=837EF1FA9A4C06AE&id=837EF1FA9A4C06AE%21130
我的主要课程
package sg.com.innovax.Twitter;
import java.io.IOException;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import sg.com.innovax.Twitter.DBObject.service.impl.wall_postServiceImpl;
import sg.com.innovax.Twitter.DBObject.service.wall_postService;
import twitter4j.*;
public final class twitter {
public static void main(String[] args) throws TwitterException {
ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
test a = new test();
}
}
我的测试实例
import org.springframework.beans.factory.annotation.Autowired;
import sg.com.innovax.Twitter.DBObject.service.wall_postService;
/**
*
* @author Nimamakaho
*/
public class test {
@Autowired
private wall_postService wpService;
test(){
// wpService is null when i break point here
System.out.println("Asd");
}
}
我的墙贴对象
package sg.com.innovax.Twitter.DBObject;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Timestamp;
import java.util.Formatter;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "wall_post")
@NamedQueries({
@NamedQuery(name="wall_post.findById", query="select wp from wall_post wp where wp.id = :id")
// @NamedQuery(name="wall_post.getByHashtagsRecords", query="select wp.*,case when wpa.id is null then false else true end as ack from (select wp from wall_post wp where wp.id in (:id) ) as wp LEFT JOIN wall_post_acknowledgement wpa on wp.id = wpa.wall_post_id")
})
public class wall_post {
@Id
@SequenceGenerator(name="wall_post_id_seq", sequenceName="wall_post_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="wall_post_id_seq")
@Basic(optional = false)
private int id;
private String title;
private String message;
private boolean enable_acknowledgement;
private boolean enable_comment;
private Timestamp created_time;
private Timestamp edited_time;
private Timestamp deleted_time;
private Timestamp last_updated;
public Timestamp getLast_updated() {
return last_updated;
}
public void setLast_updated(Timestamp last_updated) {
this.last_updated = last_updated;
}
private int user_id;
public boolean isEnable_comment() {
return enable_comment;
}
public void setEnable_comment(boolean enable_comment) {
this.enable_comment = enable_comment;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isEnable_acknowledgement() {
return enable_acknowledgement;
}
public void setEnable_acknowledgement(boolean enable_acknowledgement) {
this.enable_acknowledgement = enable_acknowledgement;
}
public Timestamp getCreated_time() {
return created_time;
}
public void setCreated_time(Timestamp created_time) {
this.created_time = created_time;
}
public Timestamp getEdited_time() {
return edited_time;
}
public void setEdited_time(Timestamp edited_time) {
this.edited_time = edited_time;
}
public Timestamp getDeleted_time() {
return deleted_time;
}
public void setDeleted_time(Timestamp deleted_time) {
this.deleted_time = deleted_time;
}
}
我的墙贴服务
package sg.com.innovax.Twitter.DBObject.service;
import java.util.List;
import sg.com.innovax.Twitter.DBObject.*;
public interface wall_postService {
public wall_post findById(Integer id);
public boolean isAuthorizeToAccess(int wallPostID,int userid);
}
我的墙贴服务impl
package sg.com.innovax.Twitter.DBObject.service.impl;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import javax.annotation.Resource;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.SQLQuery;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.cfg.Configuration;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import sg.com.innovax.Twitter.DBObject.*;
import sg.com.innovax.Twitter.DBObject.service.wall_postService;
@Service
@Repository
public class wall_postServiceImpl implements wall_postService {
private static final Logger logger = LoggerFactory.getLogger(wall_postServiceImpl.class);
@PersistenceContext
private EntityManager em;
private EntityManagerFactory emf;
@Override
public wall_post findById(Integer id) {
try{
if(id == null) return null;
TypedQuery<wall_post> query = em.createNamedQuery("wall_post.findById", wall_post.class);
query.setParameter("id", id);
return query.getSingleResult();
}catch(NoResultException ex)
{
return null;
}
catch(Exception ex)
{
logger.error("=================================================");
logger.error("findById()",ex);
return null;
}
}
public boolean isAuthorizeToAccess(int wallPostID,int userid) {
try
{
String sql =
" select wall_post_id from wall_post_authority where group_id in "+
" (select group_id from group_user where user_id = :userid group by group_id) "+
" and wall_post_id = :wallPostID group by wall_post_id ";
Query query = em.createNativeQuery(sql).setParameter("userid", userid).setParameter("wallPostID", wallPostID);
Object a = query.getSingleResult();
return true;
}catch(NoResultException ex)
{
return false;
}
catch(Exception ex)
{
logger.error("=================================================");
logger.error("isAuthorizeToAccess()",ex);
return false;
}
}
}
我的应用程序上下文xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.2.xsd">
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:postgresql://127.0.0.1:5432/testspring" />
<property name="username" value="postgres" />
<property name="password" value="admin" />
</bean>
<!-- Database
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="admin" />
</bean>
-->
<!-- Entity Manager -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="POSTGRESQL" />
</bean>
</property>
<property name="packagesToScan" value="sg.com.innovax" />
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- Jpa Repositories -->
<jpa:repositories base-package="sg.com.innovax.Twitter"></jpa:repositories>
</beans>
这是我的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sg.com.innovax</groupId>
<artifactId>innovax</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<org.springframework-version>3.2.3.RELEASE</org.springframework-version>
<org.springjpa-version>1.3.2.RELEASE</org.springjpa-version>
</properties>
<dependencies>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-stream</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.9.Final</version>
</dependency>
<!-- Additional Analyzers: -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-analyzers</artifactId>
<version>4.2.0.Final</version>
</dependency>
<!-- Infinispan integration: -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-infinispan</artifactId>
<version>4.2.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.22</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.170</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${org.springjpa-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.5.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
答案 0 :(得分:0)
AFAIK您无法自动装配静态字段。尝试将其作为实例成员,看看是否能解决您的问题。
答案 1 :(得分:0)
尝试为您的私有字段创建一个setter方法,并将自动连接的注释放在方法上,如下所示:
private wall_postService wpService;
@Autowired
public void setwpService(wall_postService wpService){
this.wpService = wpService ;
}
现在使用测试类中的方法......