一、错误一“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(); |
|