在hibernate 中使用Jpa所需的三个Jar包
hibernate-annotations.jar
hibernate-commons-annotations.jar
ejb3-persistence.jar
/权限与操作的多对一
@ManyToOne
@JoinColumn(name="opt_id")
private Operation operation;
//操作和权限的一对多
@OneToMany(mappedBy="operation")
@JoinColumn(name="opt_id")
private Set<Privilege> priSet;
hibernate 两身边一对多
多端引用一端的一个实体
一端引用多端的一个集合
关系在多端多加一个外键引用一端所以@JoinColumn(name="一端的id")
//角色与用户的多对多
@ManyToMany
@JoinTable(name="user_role",
joinColumns={@JoinColumn(name="role_id")},
inverseJoinColumns={@JoinColumn(name="user_id")})
@OrderBy("id desc")
private Set<User> userSet;
//用户与角色的多对多
@ManyToMany
@JoinTable(name="user_role",
joinColumns={@JoinColumn(name="user_id")},
inverseJoinColumns={@JoinColumn(name="role_id")})
private Set<Role> roleSet;
@Entity 实体
@Table(name="user") 表
JPA 下复合主键的生成和使用
@Embeddable public class VscancelserialnoId implements java.io.Serializable { private static final long serialVersionUID = 1L; private String cancelid; private Integer serialNo; public VscancelserialnoId() { } @Column(name = "cancelid") public String getCancelid() { if (this.cancelid == null) return null; return this.cancelid.trim(); } public void setCancelid(String cancelid) { this.cancelid = cancelid; } @Column(name = "serialno") public Integer getSerialNo() { return this.serialNo; } public void setSerialNo(Integer serialNo) { this.serialNo = serialNo; }}
@Entity @Table(name = "vscancelserialno") public class Vscancelserialno implements java.io.Serializable { private static final long serialVersionUID = 1L; /** 顺序号 */ private VscancelserialnoId id; /** * 顺序号 */ @EmbeddedId @AttributeOverrides( { @AttributeOverride(name = "cancelid", column = @Column(name = "cancelid")), @AttributeOverride(name = "serialNo", column = @Column(name = "serialno")) }) public VscancelserialnoId getId() { return this.id; }
说明:首先把一个复合主键定义成一个实体用@Embeddable标注,在另外一个实体在对这个实体标注引用,引用方式见上,以后在hql 代码写需要先通过id 然后才可以获取到具体的复合主键属性。