Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT Spring Hibernate Jpa,自动连线依赖项的注入失败_Java_Spring_Hibernate_Gwt_Jpa - Fatal编程技术网

Java GWT Spring Hibernate Jpa,自动连线依赖项的注入失败

Java GWT Spring Hibernate Jpa,自动连线依赖项的注入失败,java,spring,hibernate,gwt,jpa,Java,Spring,Hibernate,Gwt,Jpa,我创建了一个GWT Spring Hibernate JPA web应用程序。当我只使用一个数据库表时,它就工作了。但当我创建一对多关系时,我看到了一个错误 [WARN] Failed startup of context com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWi thReload@626ef808{/,F:\Documents\desktop\WorkSpace\RssReader\war} org

我创建了一个GWT Spring Hibernate JPA web应用程序。当我只使用一个数据库表时,它就工作了。但当我创建一对多关系时,我看到了一个错误

        [WARN] Failed startup of context com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWi thReload@626ef808{/,F:\Documents\desktop\WorkSpace\RssReader\war}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rssChanelDAO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: javax.persistence.EntityManagerFactory com.javacodegeeks.server.dao.RssChanelDAO.entityManagerFacto ry; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: Explicit persistence provider error(s) occurred for "MyPersistenceUnit" after trying the following discovered implementations: org.datanucleus.api.jpa.PersistenceProviderImpl, org.hibernate.ejb.HibernatePersistence from provider: org.hibernate.ejb.HibernatePersistence
我认为persistence.xml或applicationContex.xml文件中有问题。 也许我使用注释是错误的。也许我需要使用@Controller

请帮我把它们修好

applicationContex.xml

<beans >

 <context:component-scan base-package="com.javacodegeeks" />

 <!-- pour les @Service
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Service" />

        <context:exclude-filter type="annotation"
            expression="org.springframework.stereotype.Controller" />
 </context:component-scan>-->
 <tx:annotation-driven />

 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
  <property name="persistenceUnitName" value="MyPersistenceUnit" />
 </bean>

 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactory" />
 </bean>
</beans>
谢内尔多:

@Repository("rssChanelDAO")
public class RssChanelDAO extends JpaDAO<Long, RssChanelDTO> {

 @Autowired
 EntityManagerFactory entityManagerFactory;

 @PostConstruct
 public void init() {
  super.setEntityManagerFactory(entityManagerFactory);
 }
  }

错误可能是由于某些JPA映射问题造成的。我发现有人认为这可能不是你想要的,但我不确定这是否是例外的原因

在映射中,您可能希望在
RssNewsDTO
RssChanelDTO
之间建立双向关系(
RssChanelDTO RssNewsDTO.rssch
设置RssChanelDTO.news)。但是你映射的是两个不同的,不相关的关系,一个1:N和一个N:1的关系

如果希望它们是双向关系,请使用以下映射:

@Entity
@Table(name = "RSS_CHANEL")
public class RssChanelDTO implements java.io.Serializable {
    ...

    @OneToMany(mappedBy="rssch")
    Set<RssNewsDTO> news = new HashSet<RssNewsDTO>();
}


@Entity
@Table(name = "RSS_NEWS")
public class RssNewsDTO {
//try implements java.io.Serializable
    ...
    @ManyToOne
    @JoinTable(name = "RSS_CHANEL")
    private RssChanelDTO rssch;
}
@实体
@表(name=“RSS\u CHANEL”)
公共类RssChanelDTO实现java.io.Serializable{
...
@OneToMany(mappedBy=“rssch”)
Set news=newhashset();
}
@实体
@表(name=“RSS_新闻”)
公共类RssNewsDTO{
//try实现java.io.Serializable
...
@许多酮
@JoinTable(name=“RSS\u CHANEL”)
私人RssChanelDTO rssch;
}

然后,
RssNewsDTO.rssch
是控制(保存)关系的一方。(
RssChanelDTO.news
或多或少是只读的)

它是什么“地图”?当我将“name”更改为“mappedBy”时,出现了一个错误。@BratchVV:它是
@OneToMay
注释的jpa属性
@Entity
@Table(name = "RSS_CHANEL")
public class RssChanelDTO implements java.io.Serializable {

 private static final long serialVersionUID = 7440297955003302414L;

 @Id
 @GeneratedValue(generator="increment")
 @GenericGenerator(name="increment", strategy = "increment")
 @Column(name="chanel_id")
 private long id;

 @Column(name="chanel_name", nullable = false, length=30)
 private String chanelName;

 @Column(name="chanel_url", nullable = false, length=30)
 private String chanelUrl;

 @OneToMany
 @JoinTable(name = "RSS_NEWS")
 Set<RssNewsDTO> news = new HashSet<RssNewsDTO>();

// setters, getters
@Entity
@Table(name = "RSS_NEWS")
public class RssNewsDTO {

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    @Column(name="news_id")
    private Long id;  
    @Column(name="news_name", nullable = false, length=30)
    private String newsName;
    @Column(name="news_title", nullable = false, length=400)
    private String title; 
    @Column(name="news_link", nullable = false, length=50)
    private String link; 

    @ManyToOne
    @JoinTable(name = "RSS_CHANEL")
    private RssChanelDTO rssch;

// getters , setters
@Repository("rssChanelDAO")
public class RssChanelDAO extends JpaDAO<Long, RssChanelDTO> {

 @Autowired
 EntityManagerFactory entityManagerFactory;

 @PostConstruct
 public void init() {
  super.setEntityManagerFactory(entityManagerFactory);
 }
  }
@Repository("rssNewsDAO")
public class RssNewsDAO extends JpaDAO<Long, RssNewsDTO> {

 @Autowired
 EntityManagerFactory entityManagerFactory;

 @PostConstruct
 public void init() {
  super.setEntityManagerFactory(entityManagerFactory);
 }

}
@Service("rssChanelService")

public class RssChanelServiceImpl implements RssChanelService { 

 @Autowired 
 private RssChanelDAO rssChanelDAO; 

 @PostConstruct 
 public void init() throws Exception { 
 } 

 @PreDestroy 
 public void destroy() { 
 } 

 public RssChanelDTO findRssChanel(long id) { 

  return rssChanelDAO.findById(id); 

 } 

 @Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class) 
 public void saveRssChanel(String chanelName, String chanelUrl) throws Exception { 

   RssChanelDTO rssChanelDTO = new RssChanelDTO(chanelName,chanelUrl); 
   rssChanelDAO.persist(rssChanelDTO); 
  //....
 }
@Entity
@Table(name = "RSS_CHANEL")
public class RssChanelDTO implements java.io.Serializable {
    ...

    @OneToMany(mappedBy="rssch")
    Set<RssNewsDTO> news = new HashSet<RssNewsDTO>();
}


@Entity
@Table(name = "RSS_NEWS")
public class RssNewsDTO {
//try implements java.io.Serializable
    ...
    @ManyToOne
    @JoinTable(name = "RSS_CHANEL")
    private RssChanelDTO rssch;
}