注解 关联映射

一、一对多

	@Id
	private Integer deptno;
	@Column(name="dname")
	private String dname;
	@Column(name="loc")
	private String loc;
	@OneToMany(cascade={CascadeType.ALL},targetEntity=Emp.class)
	@JoinColumn(name="deptno",updatable=false)
	private Set emps = new HashSet();

	@Column(name="deptno")
	private Integer dept;

	@Column(name = "ename")
	private String ename;

	@Column(name = "job")
	private String job;

	@Column(name = "mgr")
	private Short mgr;

	@Column(name = "hiredate")
	private Date hiredate;

	@Column(name = "sal")
	private Double sal;

	@Column(name = "comm")
	private Double comm;

	@Version
	@Column(name = "version")
	private Integer version;

二、多对一

	@Id
	@GeneratedValue(generator = "emp", strategy = GenerationType.SEQUENCE)
	@SequenceGenerator(name="emp",sequenceName="emp_seq",allocationSize=1)
	private Integer empno;

	@ManyToOne(targetEntity=Dept.class)
	@JoinColumn(name = "deptno", updatable = false)
	@Basic(fetch = FetchType.LAZY)
	/* @Basic注解可以声明属性的获取策略(fetch strategy) */
	private Dept dept;

	@Column(name = "ename")
	private String ename;

	@Column(name = "job")
	private String job;

	@Column(name = "mgr")
	private Short mgr;

	@Column(name = "hiredate")
	private Date hiredate;

	@Column(name = "sal")
	private Double sal;

	@Column(name = "comm")
	private Double comm;

	@Version
	@Column(name = "version")
	private Integer version;

	@Id
	private Integer deptno;
	@Column(name="dname")
	private String dname;
	@Column(name="loc")
	private String loc;

三、多对一、一对多双向

	@Id
	private Integer deptno;
	@Column(name="dname")
	private String dname;
	@Column(name="loc")
	private String loc;
	@OneToMany(cascade={CascadeType.ALL},targetEntity=Emp.class)
	@JoinColumn(name="deptno",updatable=false)
	private Set emps = new HashSet();

	@Id
	@GeneratedValue(generator = "emp", strategy = GenerationType.SEQUENCE)
	@SequenceGenerator(name="emp",sequenceName="emp_seq",allocationSize=1)
	private Integer empno;

	@ManyToOne(targetEntity=Dept.class)
	@JoinColumn(name = "deptno", updatable = false)
	@Basic(fetch = FetchType.LAZY)
	/* @Basic注解可以声明属性的获取策略(fetch strategy) */
	private Dept dept;

	@Column(name = "ename")
	private String ename;

	@Column(name = "job")
	private String job;

	@Column(name = "mgr")
	private Short mgr;

	@Column(name = "hiredate")
	private Date hiredate;

	@Column(name = "sal")
	private Double sal;

	@Column(name = "comm")
	private Double comm;

	@Version
	@Column(name = "version")
	private Integer version;

注:当属性名和数据库字段名不一致时,要显示指定@Column

使用 @Column 注解可将属性映射到列. 使用该注解来覆盖默认值(关于默认值请参考EJB3规范). 在属性级使用该注解的方式如下:

①不进行注解

②和 @Basic一起使用

③和 @Version一起使用

④和 @Lob一起使用

⑤和 @Temporal一起使用

⑥和 @org.hibernate.annotations.CollectionOfElements一起使用 (只针对Hibernate )



四、本地化查询

@NamedNativeQuery(name="dept&emp",query="select d.*,e.* from dept d,emp e where e.deptno=d.deptno",resultSetMapping="joinMapping")
@SqlResultSetMapping(name="joinMapping",entities={
		@EntityResult(entityClass=Dept.class),
		@EntityResult(entityClass=Emp.class)
	}
)

		List<Object[]> l=sess.getNamedQuery("dept&emp").list();
		for (Object[] objects : l) {
			Dept d=(Dept)objects[0];
			Emp e=(Emp)objects[1];
			System.out.println(d.getDname()+"   "+e.getEname());
		}


五、HQL查询

@NamedQuery(name = "sqlquery", query = "select e from Emp e where e.dept.deptno = :dno")
sess.getNamedQuery("sqlquery").setInteger("dno", 10).list().size()








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值