Java自学之路-Java中级教程-40:Hibernate一对一的数据关系及自动更新数据库字段

现实生活中存在很多一对一的关系,比如一个人有一个身份证号。在数据库中这样的一对一关系也可以表示出来,也就是一条记录唯一地对应另一条记录。


在Java中实现这样的一对一关系也很简单,只要在一个类中定义另一个类的对象作为属性。这里假设一个人只能生一一个孩子,那孩子和父亲就是一对一的关系。如在Person.java中,可以定义一个属性parent,表示这个属性是这个Person对象的父亲。这个parent属性可以是Person类。Hibernate有一个注解@OneToOne,可以说明这个是唯一的对应关系。



@Component
@Entity
@Table(name="new_table")
public class Person {
	

    @OneToOne
	private Person parent;
	

	public Person getParent() {
		return parent;
	}

	public void setParent(Person parent) {
		this.parent = parent;
	}



现在要给一个Person设置一个parent,可以从页面输入一个id,把这个id对应的Person设置为parent。



在PersonForm.java中也要定义这个pid用于接收页面传来的参数,这样在PersonController.java中就可以根据pid查询一个Person记录,并把这个记录设置为parent。


	private String pid;
	
	public String getPid() {
		return pid;
	}
	public void setPid(String pid) {
		this.pid = pid;
	}



	@RequestMapping(value = "/inputPerson", method = RequestMethod.POST)
	public Object inputPerson(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) {
		try {
			
			Person parent = personService.findPerson(personForm.getPid());
			
			Person newPerson = new Person();
			newPerson.setId(Integer.parseInt(personForm.getId()));
			newPerson.setNation(personForm.getNation());
			newPerson.setInformation(personForm.getInformation());
			newPerson.setGender(personForm.getGender());
			newPerson.setHobby(personForm.getHobby());
			
			newPerson.setParent(parent);
			personService.addPerson(newPerson);
			
			Person person = personService.findPerson(personForm.getId());
			request.setAttribute("person", person);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "index";
	}


重启Tomcat服务器,访问页面路径http://localhost:8080/springMvcMavenProject/form3.jsp,输入父亲的id为11,这时保存newPerson对象到数据库。

当出现错误Unknown column 'person0_.parent_id' in 'field list',说明数据库缺少parent_id一个字段,当然可以手动给数据库加上这个字段,也可以在配置文件applicationContext里的hibernateProperties加入prop key="hibernate.hbm2ddl.auto"属性,值设置为update,这样重启服务就可以自动更新到数据库,并且有一个新的字段parent_id生成了。



保存提交后,数据库里生成一条记录,id为12,parent_id的值为11,也就是第12条记录的父亲是第11条记录。


要验证下第12条记录的父亲是第11条记录,可以使用getPage请求页面,找到第12条记录,并把它的父亲的值显示出来。这里显示parent的id为11,也就是第12条记录的父亲是第11条记录。



显示如下:



猜你喜欢

转载自blog.csdn.net/weixin_41239710/article/details/80953201