Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 如何在Hibernate中添加/删除实体集合中的元素?_Java_Hibernate_Spring - Fatal编程技术网

Java 如何在Hibernate中添加/删除实体集合中的元素?

Java 如何在Hibernate中添加/删除实体集合中的元素?,java,hibernate,spring,Java,Hibernate,Spring,基本上,我该如何做才能在创建人员之后向测试集添加新的TestEntity?另外,我如何添加一个拥有TestEntity集合的人员?我刚开始使用Hibernate,所以我觉得我肯定错过了一些东西,因为这似乎是一个非常常见的用例 我尝试过的一些事情: 尝试#1: PersonEntity person = createPerson("username"); TestEntity test = new TestEntity(); test.setTest

基本上,我该如何做才能在创建人员之后向测试集添加新的TestEntity?另外,我如何添加一个拥有TestEntity集合的人员?我刚开始使用Hibernate,所以我觉得我肯定错过了一些东西,因为这似乎是一个非常常见的用例

我尝试过的一些事情:

尝试#1:

PersonEntity person = createPerson("username");
            TestEntity test = new TestEntity();
            test.setTestId("2342");
            test.setTestName("test name");
            personDao.add(person);
            person.addTest(test);
这将导致保存人员,但没有测试信息。切换add和addTest不会改变任何内容

尝试#2:

PersonEntity person = createPerson("username");
            TestEntity test = new TestEntity();
            test.setTestId("2342");
            test.setTestName("test name");
            personDao.add(person);
            person.addTest(test);
将这样的方法添加到我的Dao(基于):

像这样打电话:

personDao.add(person);
personDao.addTest("username", test);
但是,我得到了这个错误:
org.hibernate.hibernateeexception:没有绑定到线程的hibernate会话,并且配置不允许在这里创建非事务会话

尝试#3:

PersonEntity person = createPerson("username");
            TestEntity test = new TestEntity();
            test.setTestId("2342");
            test.setTestName("test name");
            personDao.add(person);
            person.addTest(test);
将@Transaction注释添加到我的dao和实体类中,并将以下配置添加到我的应用程序上下文中:

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <!-- org.springframework.transaction.jta.JtaTransactionManager org.springframework.jdbc.datasource.DataSourceTransactionManager -->
    <property name="dataSource" ref="dataSource" />
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven />
人冬眠

public class PersonDaoHibernate extends HibernateDaoSupport implements PersonDao
{
    public String add(PersonEntity person)
    {
        getHibernateTemplate().merge(person);
        return person.getPersonId();
    }

    public void delete(String id)
    {
        Object entity = getHibernateTemplate().get(PersonEntity.class, id);
        if (entity != null)
        {
            getHibernateTemplate().delete(entity);
        }
    }

    public PersonEntity getById(String id)
    {
        return getHibernateTemplate().get(PersonEntity.class, id.toUpperCase());
    }

}

我认为您必须将方法名更改为setTest(…),因为hibernate在尝试对属性执行操作时遵循JavaBean约定。 改变这一点,我希望它能很好地工作。
其余代码看起来不错。

我认为您必须将方法名更改为setTest(…),因为hibernate在尝试对属性执行操作时遵循JavaBean约定。 改变这一点,我希望它能很好地工作。 其余代码看起来不错。

请不要使用请不要使用
public class PersonDaoHibernate extends HibernateDaoSupport implements PersonDao
{
    public String add(PersonEntity person)
    {
        getHibernateTemplate().merge(person);
        return person.getPersonId();
    }

    public void delete(String id)
    {
        Object entity = getHibernateTemplate().get(PersonEntity.class, id);
        if (entity != null)
        {
            getHibernateTemplate().delete(entity);
        }
    }

    public PersonEntity getById(String id)
    {
        return getHibernateTemplate().get(PersonEntity.class, id.toUpperCase());
    }

}