小编gil*_*_bz的帖子

具有相同标识符值的不同对象已与会话关联

可能重复:
Hibernate:具有相同标识符值的不同对象已与会话关联

我收到以下错误:

具有相同标识符值的不同对象已与会话关联

我有两种类型的对象,Course和RecommendedSchedule,它们有一套课程.以下是他们的xml定义:

<hibernate-mapping>
<class name="database.datatypes.Course" table="courses" lazy="false">
    <id name="id" column="ID">
         <generator class="assigned"/>
    </id>
    <property name="name" type="string"/>
    <property name="date"/>
</class>
Run Code Online (Sandbox Code Playgroud)

<hibernate-mapping>
<class name="database.datatypes.RecommendedSchedule" table="recommended_schedules" lazy="false">
    <id name="id" column="ID">
         <generator class="increment"/>
    </id>
    <set name="courses" table="schedules_courses" cascade="save-update" lazy="false">
        <key column="course_id"/>
        <many-to-many class="database.datatypes.Course"/>
    </set>
    <property name="semester" type="string"/>
    <property name="path" type="string"/>
</class>
Run Code Online (Sandbox Code Playgroud)

基本上,如果我插入两个推荐的系统与不同的集合,但使用相同的课程对象,它的工作原理,但如果我做完全相同的事情但使用不同的课程对象(具有相同的值)我得到错误.

谁知道我做错了什么?

以下是一段失败的代码示例:

Session s = db.factory.openSession();
    Set<Course> set1 = new HashSet<>();
    Set<Course> set2 = new HashSet<>();
    Course c1 = new Course(104167L, "Algebra A");
    Course c2 = new Course(234114L, …
Run Code Online (Sandbox Code Playgroud)

java hibernate set

3
推荐指数
1
解决办法
4万
查看次数

将带有空格的数组传递给Bash函数以充当其参数列表

我试图getopts使我的脚本能够采取命令行参数,如-s "gil.sh 123.因为它不支持具有长名称的命令行参数,所以我有一个接受参数的函数,并将长版本(在本例中为-script)的每个外观更改为短版本(-s),然后才getopts调用.

问题是,如果它包含空格(在本例中为"gil.sh 123"),那么我无法得到第二个函数将其作为一个包含2个成员的数组,在这种情况下我得到数组(-s gil.sh 123)而不是(-s "gil.sh 123")我发送的数组功能.

这是我的代码:

#!/bin/bash
#change long format arguments (-- and then a long name) to short format (- and then a single letter) and puts result in $parsed_args
function parse_args()
{
    m_parsed_args=("$@")
    #changes long format arguments (--looong) to short format (-l) by doing this:
    #res=${res/--looong/-l}
    for ((i = 0; i < $#; i++)); do
        m_parsed_args[i]=${m_parsed_args[i]/--script/-s}
    done
}

#extracts arguments into the script's variables …
Run Code Online (Sandbox Code Playgroud)

bash shell getopt

3
推荐指数
1
解决办法
1643
查看次数

将 C 识别的指针类型定义为内部 C++ 类

我有一个类想要在 C 和 C++ 之间共享,其中 C 只能将其作为指针获取。然而,因为它是一个内部类,所以不能向前声明。相反,这就是我们当前的代码在公共头文件中所做的事情:

#ifdef __cplusplus
class Container {
public:
    class Object {
        public:
        int x;
    };
};

typedef Container::Object * PObject;
#else

typedef void* PObject;

#endif
Run Code Online (Sandbox Code Playgroud)

这看起来违反了单一定义规则 (ODR),因为 C 和 C++ 使用#ifdef. 但因为这是一个指针,所以我不确定这是否会产生真正的问题。C 仅使用指针将其传递给 C++ 函数,它不会直接用它执行任何操作。例如公共头文件中的这段代码:

#ifdef __cplusplus
extern "C" {
#endif
int object_GetX(PObject pObject);

#ifdef __cplusplus
}
#endif /* __cplusplus */
Run Code Online (Sandbox Code Playgroud)

这就是我们在 C++ 文件中实现它的方式:

int object_GetX(PObject pObject) {
    return pObject->x;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 像这样违反 ODR 会造成任何实际问题吗?
  2. 如果是这样,是否有另一种方便的方法将类共享给C?

c c++ conditional-compilation inner-classes one-definition-rule

2
推荐指数
1
解决办法
107
查看次数