我收到以下错误:
具有相同标识符值的不同对象已与会话关联
我有两种类型的对象,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) 我试图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) 我有一个类想要在 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)
我的问题是:
c c++ conditional-compilation inner-classes one-definition-rule