Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 Spring/Hibernate3的多个关系问题_Java_Database_Spring_Hibernate - Fatal编程技术网

Java Spring/Hibernate3的多个关系问题

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

我正在开发一个结合了GWT、SpringMVC和Hibernate的应用程序(具体地说,我使用Hibernate3JAR库)。我刚开始使用Hibernate,需要使用以下模型

所以在节点和墙,房间和墙之间,我需要有很多关系

以下是节点实体类的代码:

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文件。非常感谢,现在它可以工作了:)我想我把注释放在哪里并不重要,因为我在通过的教程中没有找到任何关于它的内容。非常感谢:)我想我把注释放在哪里并不重要,因为我在通过的教程中没有找到任何关于它的内容