Spring Data Jpa 开发持久层

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import javax.persistence.GeneratedValue;
import javax.persistence.SequenceGenerator;

@Entity
@Table(name = "t_contract")
public class Contract  extends AuditEntity {
	//定义id, 被声明为@Entity的类必须有字段添加@Id注解(或者其父类中有字段添加@Id注解),否则会编译失败
	@Id	//这样添加注解时请确保表有字段id
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="序列名")
	@SequenceGenerator(name="序列名",sequenceName="序列名", allocationSize=1)
	private long id;
	
	//如果没有字段id,可以采用下面的方式声明@Id
	/*
		@Id
		@Column(name = "contract_num")
		private String contractNum;
	*/
	
	@Column(name = "contract_num")
	private String contractNumber;
	
	/* 声明外键,此处假设合同表里有外键id_customer与customer表多(contract)对一(customer)关联 */
	@ManyToOne
	@JoinColumn(name="id_contract")
	private Customer customer;
	
	/* 声明外键,此处假设合同表里外键id_document与document表一对一关联 */
	@OneToOne(mappedBy="contract") //此处的"contract"与Document实体中声明的Document变量名需一致
	private Document document;
	
	/* 声明外键,此处假设合同表里外键id_product与product表一(contract)对多(product)关联 */
	@OneToMany(mappedBy="contract")
	private List<Product> products;
	
	/* 省略getter/setter方法 */	
}

/** Customer */
@Entity
@Table(name = "t_customer")
public class Customer extends AuditEntity {
	
	/* 省略 */
	
	/* 定义与contract表的外键关联 */
	@OneToMany(mappedBy = "customer")
	private List<Contract> contracts;
	
	/* 省略getter/setter方法 */
}

/** Document */
@Entity
@Table(name = "t_document")
public class Document extends AuditEntity {
	
	/* 省略 */
	
	/* 定义与contract的外键关联 */
	@OneToOne
	@JoinColumn(name="id_contract")
	private Contract contract;
	
	/* 省略getter/setter方法 */	
}

/** Product */
@Entity
@Table(name = "t_product")
public class Product extends AuditEntity {
	
	/* 省略 */
	
	/* 定义与contract的外键关联 */
	@ManyToOne
	@JoinColumn(name="id_contract")
	private Contract contrat;
	
	/* 省略getter/setter方法 */	
}

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public class AuditEntity {
	
	@Column(name = "cdate", nullable = false, updatable = false)
	Date cdate;
	
	@Column(name = "creator", nullable = false, updatable = false)
	String creator;
	
	@Column(name = "edate", nullable = false)
	Date edate;
	
	@Column(name = "editor", nullable = false)
	String editor;
	
	@PrePersist
    public void prePersist() {        
        cdate = edate = new Date() ;
        creator = "system";
        editor = "system";
    }
	
	@PreUpdate
    public void preUpdate() {
        edate = new Date();
        editor = "system";
    }
	
	/* 省略getter/setter方法 */	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值