文章目录
hibernate是连接数据库使得更容易操作数据库数据的一个框架,在上期我们演示了单表建立查询。接触过数据库的都知道数据库表有三种关系,
一对一,一对多,多对多。而接下来我们在hibernate中建立
一对多关系,首先应该检查一下数据库是否打开,根据
上一篇文章,接下来继续建立表的关系。这里创建两个类Custom和company,这两个表的关系就是:
一个公司有多名员工,一个员工只能属于一家公司,这里的多代表的就是员工,公司就是一。
//员工类
private int lid;//员工id
private String name;//员工姓名
private String tel;//员工电话
private String gender;//员工性别
private Company company;//存入公司信息
//添加相应的get和set方法即可
同样的在company类中添加属性
private int cid;//公司id
private String name;//公司名称
private String address;//公司地址
//注意这里要创建一个集合用来保存和员工表之间的关系
Set<Custom> companySet = new HashSet<>();
//添加相应的get和set方法即可
之后建立两个文件夹分别存放两个类的表结构,可以直接参照单表结构进行建立。
<!--Custom表结构-->
<hibernate-mapping>
<class name="com.hbnu.pojo.Custom" table="tb_Custom">
<id name="lid">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="tel" />
<property name="gender"/>
<!--外键配置,此处非常关键 -->
<many-to-one name="company" class="com.hbnu.pojo.Company" column="clid"/>
</class>
</hibernate-mapping>
建立多表之间的联系时需要在建表时添加表的外键关系,这样才算表与表之间产生了联系。
而使用hibernate建立表时要注意,关系是建立在一对多,的一个关系属性的表中,也就是这里的公司。
<!--Company表结构-->
<hibernate-mapping>
<class name="com.hbnu.pojo.Company" table="tb_company">
<id name="cid">
<generator class="native"></generator>
</id>
<property name="name" />
<property name="address" column="addr"></property>
<!--需要双方去维护的外键
column:外键名称
-->
<!--使用级联保存,在one中添加,在操作one的一方-->
<set name="companySet">
<key column="clid"></key>
<one-to-many class="com.hbnu.pojo.Company"/>
</set>
</class>
</hibernate-mapping>
创建完表,只需要随意使用一个测试类就可以看见表已经创建成功了
综合以上,两个表之间的关系已经搭建完成,接下来我们在表中添加数据。
@Test
//测试代码
public void testOneToManySave(){
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
Customs customs1 = new Customs();
customs1.setName("百度");
customs1.setAddress("北京");
Customs customs2 = new Customs();
customs2.setName("腾讯");
customs2.setAddress("深圳");
company company1 = new company();
company1.setName("小李");
company1.setTel("18569655111");
company1.setGender("男");
company company2 = new company();
company2.setName("小顺");
company2.setTel("18569655222");
company2.setGender("男");
company company3 = new company();
company3.setName("小王");
company3.setTel("18569655333");
company3.setGender("男");
company company4 = new company();
company4.setName("小汤");
company4.setTel("18569655444");
company4.setGender("女");
company company5 = new company();
company5.setName("小明");
company5.setTel("18569655666");
company5.setGender("男");
//建立关系
customs1.getcompanySet().add(company1);
customs1.getcompanySet().add(company2);
customs1.getcompanySet().add(company3);
company1.setCustoms(customs1);
company2.setCustoms(customs1);
company3.setCustoms(customs1);
company4.setCustoms(customs2);
company5.setCustoms(customs2);
//保存数据
session.save(1);
session.save(customs2);
session.save(company1);
session.save(company2);
session.save(company3);
session.save(company4);
session.save(company5);
HibernateUtil.close(session,sessionFactory);
}
在数据库中查看数据已经添加。
注意我这里表名有些出入,请遵守自己的代码即可。

这样添加数据有点繁琐,这里介绍一个标签cascade="save-update"添加该标签在外键关系中可以更加高效的添加数据,如图

该标签页添加在customs中。
如果再需要添加数据时就不需要将custom中数据进行Sava(保存),保存company数据即可。
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我想获取主题名称与搜索关键字匹配的所有配置文件。现在我正在加载所有配置文件。我需要知道如何实现它。非常感谢任何帮助。配置文件.rbhas_many:categorizationshas_many:subjects,through::categorizations主题.rbhas_many:categorizationshas_many:profiles,through::categorizations分类.rbbelongs_to:profilebelongs_to:subjectviews/search/index.html.erb#searchform'get'do%>nil%>#
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
我使用的是遗留数据库,所以我无法控制数据模型。他们使用了很多多态链接/连接表,就像这样createtableperson(per_ident,name,...)createtableperson_links(per_ident,obj_name,obj_r_ident)createtablereport(rep_ident,name,...)其中obj_name是表名,obj_r_ident是标识符。因此链接的报告将按如下方式插入:insertintoperson(1,...)insertintoreport(1,...)insertintoreport(2,...)insertint
我遇到了RVM的问题,所以我卸载并重新安装了它。事实是我实际上尝试过rbenv,但这对我来说没有用,所以我试图让rvm重新启动并运行-而不必安装重复版本的Ruby。我至少安装了1个现有版本的Ruby:ruby--versionruby1.8.7(2011-12-28patchlevel357)[universal-darwin11.0]但是当我执行rvmlist时,我得到一个空白列表:bash-3.2$rvmlistrvmrubies#Defaultrubynotset.Try'rvmaliascreatedefault'.#=>-current#=*-current&&default
我想合并多个事件记录关系例如,apple_companies=Company.where("namelike?","%apple%")banana_companies=Company.where("namelike?","%banana%")我想结合这两个关系。不是合并,合并是apple_companies.merge(banana_companies)=>Company.where("namelike?andnamelike?","%apple%","%banana%")我要Company.where("名字像?还是名字像?","%apple%","%banana%")之后,我会写代