相关文章
更多最近更新
更多hibernate有两个一对多的Set时怎么写hbm
2019-03-25 13:39|来源: 网路
有两个类,Course和Student,其中Student里面有两个放Course的Set:
class Course
{
...
};
class Student
{
private Set<Course> goodCourseSet;
private Set<Course> badCourseSet;
...
};
问题描述:
如果Student里只有一个Course的Set,底层Course表只要加一列StudentID属性就可以了,但现在Student对应了两个Course集,仅仅加一列StudentID属性肯定已经区分不出来到底对应哪个Course集了,所以底层表结构要变,这样hbm文件肯定也要变,但我不知该怎么变。
目前已有的分析:
下面是我猜想出来的一种写法,由于需要区分出某Student的Course是good还是bad,需要在Course表中增加两个字段,studentID和isGood,isGood的值就是用来区分不同CourseSet的,我下面写的只是表示个大概意思,其中 value只是希望用来区分是哪个Set,也许实际当中不存在这个属性。
<set name= "goodCourseSet" >
<key >
<column name= "student_id" />
<column name= "isGood" value="1" />
</key>
<one-to-many class= "Course"/>
</set>
<set name= "goodCourseSet" >
<key >
<column name= "studentID" />
<column name= "isGood" value="0" />
</key>
<one-to-many class= "Course"/>
</set>
class Course
{
...
};
class Student
{
private Set<Course> goodCourseSet;
private Set<Course> badCourseSet;
...
};
问题描述:
如果Student里只有一个Course的Set,底层Course表只要加一列StudentID属性就可以了,但现在Student对应了两个Course集,仅仅加一列StudentID属性肯定已经区分不出来到底对应哪个Course集了,所以底层表结构要变,这样hbm文件肯定也要变,但我不知该怎么变。
目前已有的分析:
下面是我猜想出来的一种写法,由于需要区分出某Student的Course是good还是bad,需要在Course表中增加两个字段,studentID和isGood,isGood的值就是用来区分不同CourseSet的,我下面写的只是表示个大概意思,其中 value只是希望用来区分是哪个Set,也许实际当中不存在这个属性。
<set name= "goodCourseSet" >
<key >
<column name= "student_id" />
<column name= "isGood" value="1" />
</key>
<one-to-many class= "Course"/>
</set>
<set name= "goodCourseSet" >
<key >
<column name= "studentID" />
<column name= "isGood" value="0" />
</key>
<one-to-many class= "Course"/>
</set>
相关问答
更多-
hibernate两个外键关联一个怎么写[2023-09-13]
Flight 里两个到city的单向一对一,City一般不需要做到Flight的一对多映射(如果你的需求里有统计航线数量的,就需要了) -
从Hibernate Annotations切换到hbm.xml文件时出错(Error switching from Hibernate Annotations to hbm.xml file)[2022-09-03]
您显示的xml文件是hibernate配置文件,它不是hbm.xml文件。 您必须为每个持久性实体创建“classname.hbm.xml”文件 - 在您的情况下,它是您的Client类。 所以你必须制作一个Client.hbm.xml文件。 之后,您必须将该资源添加到您的配置文件和Hibernate Utility文件中。 你可能会觉得这很有帮助。 http://www.mkyong.com/hibernate/how-to-add-hibernate-xml-mapping-file-hbm-xml-p ... -
在最后的println上你的代码有几个问题: System.out.println((student.getAddresses() != null ? student.getAddresses().size() : 0 )); student.getAddresses()永远不会为null,因为Hibernate对非读取集合使用代理对象。 在你的.size()上调用.size()也会使hibernate在那时初始化集合。 所以它开始时并不是空的,并且通过调用.size()来强制集合被初始化。 引用来自Jav ...
-
如果使用@ javax.persistence.Table批注,则可以使用catalog参数来区分数据库。 编辑:尝试定义单独的hibernate-cfg.xml文件(称为db1-hibernate-cfg.xml和db2-hibernate-cfg.xml),并在xml元素中使用该元素列出与该工厂对应的entites。 您也可以在与JPA对应的orm.xml中定义它们。 然后在spring配置中明确定义哪个hibernate-cfg(或orm.xml)映射到哪个EntityManager: 使用Sprin ...
-
在具有一对多关联的两个表上执行Hibernate Join(Performing a Hibernate Join on two tables with a One to Many Association)[2022-05-16]
使用JPA / Hibernate时,尽可能避免在列中思考。 考虑实体并让框架进行更改。 您的查询只是请求EmployeeModel列表,因为您这样做 sess.createCriteria(EmployeeModel.class) 这就是你得到的(你试图将它转换为List的事实可能会导致编译时警告和运行时错误。 顺便说一句,谈论实体的思考,你的模型似乎很误导。 您的属性应该是实体(而不是外键); 代替 private int table_id; privat ... -
当没有提供JPA规范指定的生成器时,您正在使用hibernate默认提供的全局序列生成器。 要拥有私有生成器,您应该使用注释@SequenceGenerator声明一个私有生成器,并设置@GeneratedValue批注的generator属性 从javadoc中提取 @GeneratedValue (可选)要在SequenceGenerator或TableGenerator批注中指定的主键生成器的名称。 默认为持久性提供程序提供的id生成器。 SequenceGenerator 此批注定义了主键生成器,当 ...
-
用hbm进行Hibernate审计(Hibernate Auditing with hbm)[2023-01-04]
您似乎可以将Envers与使用hbm文件的应用程序一起使用: https : //github.com/andrezimmermann/sample-hibernate-hbm-envers并且Hibernare Envers是否支持使用映射的模型类? It seems that you can use Envers with an application that uses hbm files: https://github.com/andrezimmermann/sample-hibernate-hbm ... -
属性名称应以hibernate为前缀。通常Hibernate会首先处理你的注释配置,然后他将处理hbm文件。 如果遇到通过注释声明配置参数然后通过hbm文件重新声明(可能具有不同的值)的情况,则hbm文件中的值将替换通过注释声明的值。 否则,来自注释和hbm文件的非重叠配置参数将被“合并”在一起。 http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.html#setup-configuration Well normally Hibernate will ...正如您所说,将DataGridView返回给演示者会破坏封装并将视图和演示者耦合在一起。 演示者不应该知道视图用于可视化模型的控件。 演示者只需将数据传递给视图。 按照你的二传手的例子。 在getter中返回List
。 您可以在getter中映射模型列表,然后返回到演示者 public List DeductionDetails { get { List deductionsList = new List