在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 然后才可以获取到具体的复合主键属性。