JPA 系列教程11-复合主键-2个@Id
生活随笔
收集整理的這篇文章主要介紹了
JPA 系列教程11-复合主键-2个@Id
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
復合主鍵
指多個主鍵聯合形成一個主鍵組合
需求產生
比如航線一般是由出發地及目的地確定,如果要確定唯一的航線就可以用出發地和目的地一起來表示
ddl語句
CREATE TABLE `t_airline` (
`startCity` varchar(3) NOT NULL,
`endCity` varchar(3) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`startCity`,`endCity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Airline
package com.jege.jpa.composite;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author JE哥
* @email 1272434821@qq.com
* @description:復合主鍵-2個@Id
*/
@Entity
@Table(name = "t_airline")
public class Airline implements Serializable {
private static final long serialVersionUID = -906357110051689484L;
@Id
@Column(length = 3)
private String startCity;
@Id
@Column(length = 3)
private String endCity;
private String name;
public String getStartCity() {
return startCity;
}
public void setStartCity(String startCity) {
this.startCity = startCity;
}
public String getEndCity() {
return endCity;
}
public void setEndCity(String endCity) {
this.endCity = endCity;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Airline [startCity=" + startCity + ", endCity=" + endCity + ", name=" + name + "]";
}
}
MainTest
package com.jege.jpa.composite;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceException;
import org.junit.Test;
/**
* @author JE哥
* @email 1272434821@qq.com
* @description:復合主鍵-2個@Id測試
*/
public class MainTest {
@Test
public void crud() {
EntityManagerFactory entityManagerFactory = null;
EntityManager entityManager = null;
try {
entityManagerFactory = Persistence.createEntityManagerFactory("com.jege.jpa");
entityManager = entityManagerFactory.createEntityManager();
Airline airline = new Airline();
airline.setStartCity("PEK");
airline.setEndCity("SHA");
airline.setName("bj to sh");// 新建狀態
entityManager.getTransaction().begin();
entityManager.persist(airline);// 托管狀態
airline.setName("北京飛上海");
entityManager.getTransaction().commit();
Airline airline1 = new Airline();
airline1.setStartCity("PEK");
airline1.setEndCity("SHA");
// hibernate:瞬時狀態,持久狀態(托管),游離(脫管)狀態
airline1 = entityManager.find(Airline.class, airline1);
System.out.println("name:" + airline1.getName());
entityManager.getTransaction().begin();
entityManager.remove(airline1);
entityManager.getTransaction().commit();
// airline1變為刪除狀態
entityManager.getTransaction().begin();
entityManager.persist(airline1);
entityManager.getTransaction().commit();
} catch (PersistenceException e) {
e.printStackTrace();
entityManager.getTransaction().rollback();
throw e;
} finally {
if (entityManager != null && entityManager.isOpen())
entityManager.close();// 游離狀態
if (entityManagerFactory != null && entityManagerFactory.isOpen())
entityManagerFactory.close();
}
}
}
源碼地址
https://github.com/je-ge/jpa
如果覺得我的文章對您有幫助,請打賞支持。您的支持將鼓勵我繼續創作!謝謝!
總結
以上是生活随笔為你收集整理的JPA 系列教程11-复合主键-2个@Id的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用fastai完成图像分类
- 下一篇: python3的hashlib库sha2