Java Spring/Hibernate3的多个关系问题
我正在开发一个结合了GWT、SpringMVC和Hibernate的应用程序(具体地说,我使用Hibernate3JAR库)。我刚开始使用Hibernate,需要使用以下模型 所以在节点和墙,房间和墙之间,我需要有很多关系 以下是节点实体类的代码:Java Spring/Hibernate3的多个关系问题,java,database,spring,hibernate,Java,Database,Spring,Hibernate,我正在开发一个结合了GWT、SpringMVC和Hibernate的应用程序(具体地说,我使用Hibernate3JAR库)。我刚开始使用Hibernate,需要使用以下模型 所以在节点和墙,房间和墙之间,我需要有很多关系 以下是节点实体类的代码: package sk.jakub.app.shared.model; @Entity public class Node implements Serializable{ private static final long serialV
package sk.jakub.app.shared.model;
@Entity
public class Node implements Serializable{
private static final long serialVersionUID = -5924198459524011627L;
private Long id; //id of the concrete node
private float x, y;
@ManyToMany
private Collection<Wall> walls;
public Node(){
walls = new ArrayList<Wall>();
}
@Id
@Column(name = "NODE_ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
//getters and setters for x,y omitted
public void addWall(Wall wall){
if(!getWalls().contains(wall))
getWalls().add(wall);
if(!wall.getNodes().contains(this))
wall.getNodes().add(this);
}
public Collection<Wall> getWalls(){
return walls;
}
}
华尔道:
package sk.jakub.app.server.dao;
@Repository
public class NodeDAO {
@Autowired
private HibernateTemplate hibernate;
public Node get(Long id){
return hibernate.get(Node.class, id);
}
public void delete(Node entity){
hibernate.delete(entity);
}
public void save(Node entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
package sk.jakub.app.server.dao;
@Repository
public class WallDAO {
@Autowired
private HibernateTemplate hibernate;
public Wall get(Long id){
return hibernate.get(Wall.class, id);
}
public void delete(Wall entity){
hibernate.delete(entity);
}
public void save(Wall entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
package sk.jakub.app.server.dao;
@Repository
public class RoomDAO {
@Autowired
private HibernateTemplate hibernate;
public Room get(Long id){
return hibernate.get(Room.class, id);
}
public void delete(Room entity){
hibernate.delete(entity);
}
public void save(Room entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<tx:annotation-driven transaction-manager="transactionManager"/>
<context:annotation-config/>
<!-- NASTAVENIE KORENOVEHO BALIKA -->
<context:component-scan base-package="sk.jakub.app.server"/>
<aop:aspectj-autoproxy/>
<bean id="databaseProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
</bean>
<!-- UDAJE PRE PRIPOJENIE DO DATABAZY A VYTVORENIE BEANU PRE DATA SOURCE -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost:3306/editor" />
<property name="username" value="root" />
<property name="password" value="gk04006c" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="-1" />
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- NASTEAVENIE DIALEKTU PRE HIBERNATE A POD -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" destroy-method="destroy">
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="sk.jakub.app.shared.model" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.id.new_generator_mappings">true</prop>
</props>
</property>
</bean>
<!-- NASTAVEIE HIBERNATE TEMPLATE PRE PRIPOJENIE KU DATABAZE, TEN JE POTOM PRIPRAVENY NA AUTOWIRING DO SAMOTNEHO JAVOVSKEHO KODU -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
RoomDAO:
package sk.jakub.app.server.dao;
@Repository
public class NodeDAO {
@Autowired
private HibernateTemplate hibernate;
public Node get(Long id){
return hibernate.get(Node.class, id);
}
public void delete(Node entity){
hibernate.delete(entity);
}
public void save(Node entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
package sk.jakub.app.server.dao;
@Repository
public class WallDAO {
@Autowired
private HibernateTemplate hibernate;
public Wall get(Long id){
return hibernate.get(Wall.class, id);
}
public void delete(Wall entity){
hibernate.delete(entity);
}
public void save(Wall entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
package sk.jakub.app.server.dao;
@Repository
public class RoomDAO {
@Autowired
private HibernateTemplate hibernate;
public Room get(Long id){
return hibernate.get(Room.class, id);
}
public void delete(Room entity){
hibernate.delete(entity);
}
public void save(Room entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<tx:annotation-driven transaction-manager="transactionManager"/>
<context:annotation-config/>
<!-- NASTAVENIE KORENOVEHO BALIKA -->
<context:component-scan base-package="sk.jakub.app.server"/>
<aop:aspectj-autoproxy/>
<bean id="databaseProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
</bean>
<!-- UDAJE PRE PRIPOJENIE DO DATABAZY A VYTVORENIE BEANU PRE DATA SOURCE -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost:3306/editor" />
<property name="username" value="root" />
<property name="password" value="gk04006c" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="-1" />
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- NASTEAVENIE DIALEKTU PRE HIBERNATE A POD -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" destroy-method="destroy">
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="sk.jakub.app.shared.model" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.id.new_generator_mappings">true</prop>
</props>
</property>
</bean>
<!-- NASTAVEIE HIBERNATE TEMPLATE PRE PRIPOJENIE KU DATABAZE, TEN JE POTOM PRIPRAVENY NA AUTOWIRING DO SAMOTNEHO JAVOVSKEHO KODU -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
现在是Spring MVCapplicationContext.xml:
package sk.jakub.app.server.dao;
@Repository
public class NodeDAO {
@Autowired
private HibernateTemplate hibernate;
public Node get(Long id){
return hibernate.get(Node.class, id);
}
public void delete(Node entity){
hibernate.delete(entity);
}
public void save(Node entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
package sk.jakub.app.server.dao;
@Repository
public class WallDAO {
@Autowired
private HibernateTemplate hibernate;
public Wall get(Long id){
return hibernate.get(Wall.class, id);
}
public void delete(Wall entity){
hibernate.delete(entity);
}
public void save(Wall entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
package sk.jakub.app.server.dao;
@Repository
public class RoomDAO {
@Autowired
private HibernateTemplate hibernate;
public Room get(Long id){
return hibernate.get(Room.class, id);
}
public void delete(Room entity){
hibernate.delete(entity);
}
public void save(Room entity){
hibernate.saveOrUpdate(entity);
}
private Session getCurrentSession(){
return hibernate.getSessionFactory().getCurrentSession();
}
}
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<tx:annotation-driven transaction-manager="transactionManager"/>
<context:annotation-config/>
<!-- NASTAVENIE KORENOVEHO BALIKA -->
<context:component-scan base-package="sk.jakub.app.server"/>
<aop:aspectj-autoproxy/>
<bean id="databaseProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
</bean>
<!-- UDAJE PRE PRIPOJENIE DO DATABAZY A VYTVORENIE BEANU PRE DATA SOURCE -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost:3306/editor" />
<property name="username" value="root" />
<property name="password" value="gk04006c" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="-1" />
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- NASTEAVENIE DIALEKTU PRE HIBERNATE A POD -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" destroy-method="destroy">
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="sk.jakub.app.shared.model" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.id.new_generator_mappings">true</prop>
</props>
</property>
</bean>
<!-- NASTAVEIE HIBERNATE TEMPLATE PRE PRIPOJENIE KU DATABAZE, TEN JE POTOM PRIPRAVENY NA AUTOWIRING DO SAMOTNEHO JAVOVSKEHO KODU -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
我认为问题可能出在定义了许多关系的集合中。我尝试了@ElementCollection注释,用于许多集合,但没有成功
非常感谢您的建议、想法和帮助:)您必须选择:要么为getter添加注释,要么为字段添加注释。但不是两者都有
如果
@Id
位于getter上,则将忽略字段的所有注释。如果@Id
位于字段上,则将忽略getter上的所有注释。您必须选择:要么为getter添加注释,要么为字段添加注释。但不是两者都有
如果
@Id
位于getter上,则将忽略字段的所有注释。如果@Id
位于字段上,然后,getter上的所有注释都将被忽略。如果需要,我还可以发布web.xml文件如果需要,我还可以发布web.xml文件。非常感谢,现在它可以工作了:)我想我把注释放在哪里并不重要,因为我在通过的教程中没有找到任何关于它的内容。非常感谢:)我想我把注释放在哪里并不重要,因为我在通过的教程中没有找到任何关于它的内容