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方法 */
}
Spring Data Jpa 开发持久层
最新推荐文章于 2024-07-03 16:58:15 发布