• jpa复合主键的使用


    AirLinePk复合主键类

    package com.ljq.entity;

    import javax.persistence.Column;
    import javax.persistence.Embeddable;

    /**
    * 使用复合主键要满足的条件
    *
    * 1、要实现序列化 2、提供默认的构造方法 3、实现hashCope
    *
    *
    @author Administrator
    *
    */

    @SuppressWarnings(
    "serial")
    @Embeddable
    //embeddable: 可嵌入的
    public class AirLinePk implements java.io.Serializable {
    @Column(length
    = 3)
    private String startCity;// 出发城市

    @Column(length
    = 3)
    private String endCity;// 抵达城市

    public AirLinePk() {
    super();
    }

    public AirLinePk(String startCity, String endCity) {
    super();
    this.startCity = startCity;
    this.endCity = endCity;
    }

    public String getEndCity() {
    return endCity;
    }

    public void setEndCity(String endCity) {
    this.endCity = endCity;
    }

    public String getStartCity() {
    return startCity;
    }

    public void setStartCity(String startCity) {
    this.startCity = startCity;
    }

    @Override
    public int hashCode() {
    final int PRIME = 31;
    int result = 1;
    result
    = PRIME * result + ((endCity == null) ? 0 : endCity.hashCode());
    result
    = PRIME * result
    + ((startCity == null) ? 0 : startCity.hashCode());
    return result;
    }

    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    final AirLinePk other = (AirLinePk) obj;
    if (endCity == null) {
    if (other.endCity != null)
    return false;
    }
    else if (!endCity.equals(other.endCity))
    return false;
    if (startCity == null) {
    if (other.startCity != null)
    return false;
    }
    else if (!startCity.equals(other.startCity))
    return false;
    return true;
    }

    }

    AirLine实体类

    package com.ljq.entity;


    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;

    @SuppressWarnings(
    "serial")
    @Entity
    public class AirLine implements java.io.Serializable{
    @EmbeddedId
    private AirLinePk id;

    @Column(length
    =20)
    private String name;

    public AirLine() {
    super();
    }

    public AirLine(String startCity,String endCity, String name) {
    this.id =new AirLinePk(startCity,endCity);
    this.name = name;
    }


    public AirLinePk getId() {
    return id;
    }

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

    public String getName() {
    return name;
    }

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




    }

    PKTest测试类

    package com.ljq.test;

    import java.util.List;

    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;

    import org.junit.Test;

    import com.ljq.entity.AirLine;
    import com.ljq.entity.AirLinePk;

    public class PKTest {

    @Test
    public void save() {
    EntityManagerFactory factory
    = Persistence.createEntityManagerFactory("ljq");
    EntityManager em
    =factory.createEntityManager();
    em.getTransaction().begin();

    em.persist(
    new AirLine("PEK","SHA","北京飞上海"));


    em.getTransaction().commit();
    em.close();
    factory.close();

    }

    @Test
    public void find() {
    EntityManagerFactory factory
    = Persistence.createEntityManagerFactory("ljq");
    EntityManager em
    =factory.createEntityManager();
    em.getTransaction().begin();

    AirLine airLine
    =em.find(AirLine.class, new AirLinePk("PEK","SHA"));
    System.out.println(airLine.getName());


    em.getTransaction().commit();
    em.close();
    factory.close();

    }

    @Test
    public void update() {
    EntityManagerFactory factory
    = Persistence.createEntityManagerFactory("ljq");
    EntityManager em
    =factory.createEntityManager();
    em.getTransaction().begin();

    AirLine airLine
    =em.getReference(AirLine.class, new AirLinePk("PEK","SHA"));
    airLine.setName(
    "北京飞上海北京飞上海");
    em.merge(airLine);


    em.getTransaction().commit();
    em.close();
    factory.close();

    }

    @SuppressWarnings({
    "unused", "unchecked" })
    @Test
    public void list() {
    EntityManagerFactory factory
    = Persistence.createEntityManagerFactory("ljq");
    EntityManager em
    =factory.createEntityManager();
    em.getTransaction().begin();


    List
    <AirLine> airLines=em.createQuery("select o from AirLine o").getResultList();
    for(AirLine air:airLines){
    System.out.println(air.getName());
    }

    em.getTransaction().commit();
    em.close();
    factory.close();

    }

    @SuppressWarnings({
    "unused", "unchecked" })
    @Test
    public void detele() {
    EntityManagerFactory factory
    = Persistence.createEntityManagerFactory("ljq");
    EntityManager em
    =factory.createEntityManager();
    em.getTransaction().begin();


    em.remove(em.getReference(AirLine.
    class, new AirLinePk("PEK","SHA")));

    em.getTransaction().commit();
    em.close();
    factory.close();

    }

    /**
    * 用来判断映射是否成功
    *
    */
    @Test
    public void test() {
    Persistence.createEntityManagerFactory(
    "ljq");
    }

    }
  • 相关阅读:
    程序员代码面试指南:IT名企算法与数据结构题目最优解
    经典排序算法
    Log4j输出格式控制--log4j的PatternLayout参数含义
    常用数据库4 mongodb
    常用数据库2 sqlite及SQL注入
    面试常问-数据库索引实现原理
    自定义web框架
    HTML|CSS之布局相关总结
    C++模板类练习题
    C++中的运算符重载练习题
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1978680.html
Copyright © 2020-2023  润新知