jpa复习日志--复合主键的使用

jpa复习日志--复合主键的使用

复合主键(UserBean和CJBean)

注:这里使用到了 @EmbeddedId(在对数据库的真正操作表嵌入复合主键)和@Embeddable(用来嵌入的表,只添加这个注解,其他的注解不需要)
UserBean:

package com.bean;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

@Entity
@Table(name = "score")
public class ScoreBean implements Serializable {
    //测试复合主键,简单的插入时可以用两个id

//    @Id
//    private String name;
//    @Id
//    private String classinfo;

    //直接使用另外一张表来映射这两个主键
    @Id
    @EmbeddedId       //嵌入式的id
    private CJBean id;

    private int value;

    public int getValue() {
        return value;
    }

    public CJBean getId() {
        return id;
    }

    public void setId(CJBean id) {
        this.id = id;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

CJBean:

package com.bean;

import javax.persistence.Embeddable;
import java.io.Serializable;


@Embeddable
public class CJBean implements Serializable {

    private String name;

    private String classinfo;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getClassinfo() {
        return classinfo;
    }

    public void setClassinfo(String classinfo) {
        this.classinfo = classinfo;
    }
}

复合主键的使用

1.不涉及到查询,可以使用两个@Id
2.涉及到查询,使用嵌入式
测试代码:

package com.test;

import com.bean.CJBean;
import com.bean.ScoreBean;
import com.bean.UserBean;
import com.util.JpaUtil;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

public class TestFive {
    public static void main(String[] args) {
        //复合主键插入
        //TestFive.contact();
        //复合主键查询
        TestFive.query();
    }

    private static void query() {
        EntityManager entityManager = null;
        EntityTransaction tx = null;
        try {
            entityManager = JpaUtil.getManager();
            tx = entityManager.getTransaction();
            tx.begin();
            CJBean item=new CJBean();
            item.setClassinfo("11111111111");
            item.setName("bbbbbbbbbbbb");
            ScoreBean bean = entityManager.find(ScoreBean.class,item);
            //entityManager.persist(bean);
            System.out.println(bean.getId().getClassinfo()+"\t"+bean.getId().getName());
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        } finally {
            try {
                JpaUtil.closeManager();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.exit(0);
    }

    private static void contact() {
        EntityManager entityManager = null;
        EntityTransaction tx = null;
        try {
            entityManager = JpaUtil.getManager();
            tx = entityManager.getTransaction();
            tx.begin();
            ScoreBean bean = new ScoreBean();
            //bean.setClassinfo("11111111111");
            //bean.setName("bbbbbbbbbbbb");
            bean.setValue(99);
            entityManager.persist(bean);
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        } finally {
            try {
                JpaUtil.closeManager();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.exit(0);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值