Java GWT Spring Hibernate Jpa,自动连线依赖项的注入失败
我创建了一个GWT Spring Hibernate JPA web应用程序。当我只使用一个数据库表时,它就工作了。但当我创建一对多关系时,我看到了一个错误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
[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;
}