java jpa查詢沒有id表的方法
一、前言
jpa中,如果想查詢數據庫,必須有一個@Entity
實體類,這個類的內容要與數據庫表的列一一對應;
并且這個類中,必須有一個Long id
字段,對應數據庫表中的id
列。
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
但是,本人的項目里有個數據庫表,確實沒有id
這一列,有的是class_id
這一列,名字不一樣。
CREATE TABLE `classinfo` ( `class_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `class_name` varchar(200) NOT NULL DEFAULT '' COMMENT 'name', PRIMARY KEY (`class_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
這種情況,使用jpa查詢就會報錯,找不到id列(確實沒有)
即使改@Entity
代碼,改為:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long classId;
這樣也是不行的,查詢也會報錯(名字必須叫id)
表結構確實不能修改,查詢又必須使用jpa,但是沒有id列又不行……
二、解決方法
1.可以先建一個空表,只有一個id
列,例如:
CREATE TABLE `simpletable` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.然后寫一個@Entity
實體類,與空表simpletable
對應,只有一個id列,例如:
import javax.persistence.*; import java.io.Serializable; import java.util.Objects; /** * A Simpletable. */ @Entity @Table(name = "simpletable") public class Simpletable implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Simpletable simpletable = (Simpletable) o; if (simpletable.getId() == null || getId() == null) { return false; } return Objects.equals(getId(), simpletable.getId()); } @Override public int hashCode() { return Objects.hashCode(getId()); } @Override public String toString() { return "Simpletable{" + "id=" + getId() + "}"; } }
3.然后寫一個repository
類,放入這個實體類,然后查詢其它表,如下:
import xxx.Simpletable; import org.springframework.data.jpa.repository.*; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; /** * Spring Data repository for the Classinfo entity. */ @SuppressWarnings("unused") @Repository public interface ClassinfoRepository extends CrudRepository<Simpletable, Long> { @Query(value = "select * " + " from classinfo " + "where class_id = ?1 " + "order by class_id DESC ", nativeQuery = true) List<Map<String,Object>> findByClassId(String id); }
(1)這段代碼里,主要是在extends CrudRepository<Simpletable, Long>
這里放入了Simpletable
(必須放一個與表對應的實體類,否則執(zhí)行查詢還是會報錯)
(2)然后,在這個類中去查詢沒有id列的表classinfo
(3)由于classinfo
表沒有實體類(沒有id列,無法寫實體類),所以只能返回 List<Map<String,Object>>
類型,后續(xù)需要自己拆分獲取字段。
(4)這樣,就實現了jpa查詢沒有id的表的方法。
三、備注
1.注意返回類型不能寫成List<HashMap<String,Object>>
,會無法正常獲取key-value
2.如果使用jpa,最好是建表的時候就建一個id列作為自增主鍵。
到此這篇關于java jpa查詢沒有id表的方法的文章就介紹到這了,更多相關java jpa查詢沒有id表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Java?SpringBoot的前后端分離信息管理系統(tǒng)的設計和實現
當今社會,人才的流動速度大大增加,因此也對黨建工作的管理層面工作帶來了空前且復雜的挑戰(zhàn),從而使得如何高效的開展管理黨建工作成為了亟待解決的問題。本文將介紹通過Java?SpringBoot實現前后端分離信息管理系統(tǒng),感興趣的同學可以了解一下2021-11-11Servlet獲取AJAX POST請求中參數以form data和request payload形式傳輸的方法
這篇文章主要介紹了Servlet獲取AJAX POST請求中參數以form data和request payload形式傳輸的方法,結合實例形式詳細分析了post數據發(fā)送及獲取請求數據的原理與相關操作注意事項,需要的朋友可以參考下2017-11-11spring cloud consul使用ip注冊服務的方法示例
這篇文章主要介紹了spring cloud consul使用ip注冊服務的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03基于java SSM springboot實現抗疫物質信息管理系統(tǒng)
這篇文章主要介紹了基于JAVA SSM springboot實現的抗疫物質信息管理系統(tǒng),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08