黑马程序员技术交流社区

标题: Hibernate学习中,编码易错知识点小结 [打印本页]

作者: 乌卡卡    时间: 2015-7-2 10:53
标题: Hibernate学习中,编码易错知识点小结
一、错误一“must specify an identifier type: cn.itcast.store.domain.Student”
原因为:id未指定名称
二、错误二:Repeated column in mapping for entity: cn.itcast.store.domain.Order column: customer_id (should be mapped with insert="false")
原因为,应该在多端加入insert="false" update="false"
三、inverse="true"在many-to-one中是不能设置的,只要在one的一端才可以设置inverse。inverse=true 的为被动方, 由主动方负责维护关联关系。一般
在one一方设置inverse=true,由多方集合端管理关系

四、用注解生成表
注:1、以下只例举出了部分代码, 其中的@Entity,@table,@Id,@GeneratedValue都与其前的配置很类似
    2、注解部分代码可以写在属性上,也可以放到属性get方法上
    3、如果用注解和配置同时对一个表进行操作,最后启作用的是配置文件,注解将会失效
    4、 注解语句后面不能加分号
(1) 一对多的关系,举例(mother,childs),会自动在多方表的后端增加一方的主键作为外键关联字段
Mother(作为一端):
       @OneToMany(targetEntity=Childs.class,mappedBy("mother"))
       private Set<Childs>childs=new HashSet<Childs>();
Childs(作为多端)
       @ManyToOne(targetEntity=Mother.class)
       private Mother mother;
(2)多对多的关系,举例(students,course),多对多的要点是会自动生成第三张表,该表中的列由两张基表的主键生成
Students(两边都是多端)
      @ManyToMany(targetEntity=Course.class)
      @JoinTable(name="students_couses",
     joinColumns=@JoinColumn(name="student_id"),
     inverseJoinColumns=@JoinColumn(name="couse_id"))
      private Set<Course>course=new HashSet<Course>();
Course(两边都是多端)
     @ManyToMany(targetEntity=Students.class,mappyedBy="couses")
     private Set<Students>students=new HashSet<Students>();
(2)一对一的关系(company,address)事实上有两种方法可以设置一对一的关键,把一方设为<many-to-one)
通过配置文件方式
Company:<class name="cn.itcast.store.domain.Company" table="company" catalog="annotationTest">
        <id name="id">
    <generator class="increment"></generator>
    </id>
    <property name="name"></property>
    <one-to-one name="address" class="cn.itcast.store.domain.Address"></one-to-one>
    </class>
Address:<class name="cn.itcast.store.domain.Address" table="address" catalog="annotationTest">
        <id name="id">
        <generator class="foreign">//主键依赖于company表
        <param name="property">company</param>
        </generator>
        </id>
        <property name="name"></property>                                    //constrained="true"表示有外键约束性
        <one-to-one name="company" class="cn.itcast.store.domain.Company" constrained="true"></one-to-one>
        </class>
五、查询的时候,查询条件中的命名参数和位置参数,以及查询条件为按实体查询,为第三种情况
HQL写法:
(1)Customer customer1 = (Customer) session.createQuery("from Customer where name = ?").setParameter(0, "tom").uniqueResult();
(2)Customer customer2 = (Customer) session.createQuery("from Customer where name = :cname").setParameter("cname", "tom").uniqueResult();
(3)List list2 = session.createQuery("from Order where customer = ?").setEntity(0, customer).list();
作者: lvzhfeng    时间: 2015-7-2 10:59
看不懂。。。
作者: 乌卡卡    时间: 2015-7-2 11:38
lvzhfeng 发表于 2015-7-2 10:59
看不懂。。。

我没有梳理,自己的程序中出现的错
作者: 懒锋2015    时间: 2015-7-2 11:47
这是安卓课程中学的?
作者: 乌卡卡    时间: 2015-7-2 11:54
懒锋2015 发表于 2015-7-2 11:47
这是安卓课程中学的?

JavaEE的视频教程
作者: 懒锋2015    时间: 2015-7-2 11:55
乌卡卡 发表于 2015-7-2 11:54
JavaEE的视频教程

哦,难怪!我说在安卓的基础视频里没看到这个东西。多学点Java很有必要
作者: 乌卡卡    时间: 2015-7-2 12:28
懒锋2015 发表于 2015-7-2 11:55
哦,难怪!我说在安卓的基础视频里没看到这个东西。多学点Java很有必要

嗯,是的。你在安卓几期,已经在北京了吗
作者: 懒锋2015    时间: 2015-7-2 12:35
乌卡卡 发表于 2015-7-2 12:28
嗯,是的。你在安卓几期,已经在北京了吗

呃,还没。打算去上海上安卓班
作者: 乌卡卡    时间: 2015-7-2 12:40
懒锋2015 发表于 2015-7-2 12:35
呃,还没。打算去上海上安卓班

噢噢,多交流噢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2