hibernate 注解 联合主键映射

联合主键用Hibernate注解映射方式主要有三种:
第一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将
该类注解为@Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注
解为@Id

第二、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,最后
在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@EmbeddedId

第三、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并要重写equals和hashcode.
最后在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id,并在该类上方将上这样的注解:@IdClass(联合主键类.class)

    public class BmRoRolerightmatrixPK implements Serializable{  

        private static final long serialVersionUID = 1L;  

        private Long actId;//功能操作ID
        private Long roleId;//角色ID  

        @Column(name = "ACT_ID",unique = false,nullable = true,length = 10)
        public Long getActId() {
            return actId;
        }
        public void setActId(Long actId) {
            this.actId = actId;
        }  

        @Column(name = "ROLE_ID",unique = false,nullable = true,length = 10)
        public Long getRoleId() {
            return roleId;
        }
        public void setRoleId(Long roleId) {
            this.roleId = roleId;
        }  

    }  
    @Entity
    @IdClass(BmRoRolerightmatrixPK.class)
    @Table(name = "BM_RO_ROLERIGHTMATRIX")
    public class BmRoRolerightmatrix implements Serializable{
        private static final long serialVersionUID = 1L;
        public BmRoRolerightmatrix(){}
        //属性
        private Long actId;//功能操作ID  

        private Long roleId;//角色ID  

        @Id
        public Long getActId() {
            return this.actId;
        }  

        @Id
        public Long getRoleId() {
            return this.roleId;
        }
    ...  
public class WalletBalanceId implements Serializable{

    /**
     *
     */
    private static final long serialVersionUID = -6967634249077311858L;

    /***
     * CID 客户号
     */
    @ManyToOne
    @JoinColumn(name = "CID")
    private Customer customer;

    /***
     * 理财账号
     */
    @Column(name = "ACCT_NO")
    private String acctNo;

    public WalletBalanceId() {
        super();
    }

    public WalletBalanceId(Customer customer, String acctNo) {
        super();
        this.customer = customer;
        this.acctNo = acctNo;
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public String getAcctNo() {
        return acctNo;
    }

    public void setAcctNo(String acctNo) {
        this.acctNo = acctNo;
    }

    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this,
                ToStringStyle.SHORT_PREFIX_STYLE);
    }
}
@Entity
@Table(name = "T_WALLET_BALANCE")
@IdClass(WalletBalanceId.class)
public class WalletBalance implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -4041192003429561466L;

    /***
     * CID(主键) 客户号
     */
    @Id
    @ManyToOne
    @JoinColumn(name = "CID")
    private Customer customer;

    /***
     * 理财账号
     */
    @Id
    @Column(name = "ACCT_NO")
    private String acctNo;

    /***
     * 总金额
     */
    @Column(name = "TOTAL_AMT")
    private BigDecimal totalAmt;

    /***
     * 资金状态
     */
    @Column(name = "FUND_STATE")
    private String fundState;

    /***
     * 更新日期
     */
    @Column(name = "UPD_DATE")
    private Date updDate;

    public WalletBalance() {
        super();
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public String getAcctNo() {
        return acctNo;
    }

    public void setAcctNo(String acctNo) {
        this.acctNo = acctNo;
    }

    public BigDecimal getTotalAmt() {
        return totalAmt;
    }

    public void setTotalAmt(BigDecimal totalAmt) {
        this.totalAmt = totalAmt;
    }

    public String getFundState() {
        return fundState;
    }

    public void setFundState(String fundState) {
        this.fundState = fundState;
    }

    public Date getUpdDate() {
        return updDate;
    }

    public void setUpdDate(Date updDate) {
        this.updDate = updDate;
    }

    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this,
                ToStringStyle.SHORT_PREFIX_STYLE);
    }
}
时间: 2024-10-06 00:01:29

hibernate 注解 联合主键映射的相关文章

Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)

Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessionFactory; static{ //获取配置信息 hibernate.cfg.xml Configuration configuration = new Configuration().configure(); //创建一个 ServiceRegistry的实例 //首先获得其标准建造器,此处用

hibernate里联合主键composite-id映射,查询单个主键的问题(转)

今天项目中遇到这个问题,搞了大半天,我郁闷...hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbWjjc" table="bb_wjjc" schema="dbo" catalog="wjgl">        <composite-id name="id" class="com.cskj.hi

hibernate里联合主键composite-id映射,查询单个主键的问题

今天项目中遇到这个问题,搞了大半天,现在记录下来hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbWjjc" table="bb_wjjc" schema="dbo" catalog="wjgl"> <composite-id name="id" class="com.cskj.hibernate

Hibernate 查询排序与联合主键映射

1.查询排序 (1)数据库排序(推荐) <map order-by="name ase" > <!--name的升序,降序desc--> session.createQuery(" ").uniqueResult() //返回唯一的对象,前台对象只有一个 <set order-by="name asc"> (2)内存排序 <set sort="natural" > sort属性值

hibernate联合主键映射

联合主键用的不是很多,用的时候查到就是. Wife里id和name联合做主键,需要新建一个主键类,WifePK,必须实现Serializable接口,重写hashcode.equals. 在Husband类里用Wife的id和name做外键关联. Wife类: package com.oracle.hibernate; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.pe

hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化类的主键生成主键的实体的映射文件 首先需要指定主键生成方式为foreigner 格式为: <id name="departmentId" type="java.lang.Integer"> <column name="department_i

Hibernate中联合主键生成策略

一.xml配置联合主键 单独设计一个类,作为主键类,如StudentPK A.实现序列化(Serializable接口) B.重写equals()和hashCode() 为什么要从写equals()和hashCode()方法? hashCode相同的会被存储在hash表的同一位置,当找到特定的hashcode之后,会根据equals()方法判断是否是相同的对象,来查找到对应的数据. 小实验1: (1)创建联合主键类StudentPK package com.zgy.hibernate.model

hibernate配置联合主键

配置联合主键有多种方式,这里仅记录我使用的一种. 直接上代码 使用@IdClass,红色标注. package com.szy.operation.stat.model.agent.school; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass;

《Hibernate学习笔记之三》:联合主键的映射

<Hibernate学习笔记之三>:联合主键的映射 就如在前面所举的例子一样,是使用的id作为唯一的主键,一般情况下我们也只使用唯一的一个属性作为主键,但是在实际中,我们可能会遇到几个属性作为主键的情况,因此,在本篇博文中,就来介绍下,联合主键的映射关系应该如何来做?? 联合主键的映射有两种方式来进行实现. 1.使用映射文件 XXX.bhm.xml 2.使用Annotation Hibernate首先需要使用联合主键的实体类必须实现Serializable接口,即为了使序列能够被序列化进行传输