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(必须放一个与表对应的实体类,否则执行查询还是会报错)
(2)然后,在这个类中去查询没有id列的表classinfo
(3)由于classinfo表没有实体类(没有id列,无法写实体类),所以只能返回 List<Map<String,Object>>类型,后续需要自己拆分获取字段。
(4)这样,就实现了jpa查询没有id的表的方法。
三、备注
1.注意返回类型不能写成List<HashMap<String,Object>>,会无法正常获取key-value
2.如果使用jpa,最好是建表的时候就建一个id列作为自增主键。
到此这篇关于java jpa查询没有id表的方法的文章就介绍到这了,更多相关java jpa查询没有id表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Java SpringBoot的前后端分离信息管理系统的设计和实现
当今社会,人才的流动速度大大增加,因此也对党建工作的管理层面工作带来了空前且复杂的挑战,从而使得如何高效的开展管理党建工作成为了亟待解决的问题。本文将介绍通过Java SpringBoot实现前后端分离信息管理系统,感兴趣的同学可以了解一下2021-11-11
Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法
这篇文章主要介绍了Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法,结合实例形式详细分析了post数据发送及获取请求数据的原理与相关操作注意事项,需要的朋友可以参考下2017-11-11
spring cloud consul使用ip注册服务的方法示例
这篇文章主要介绍了spring cloud consul使用ip注册服务的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-03-03
基于java SSM springboot实现抗疫物质信息管理系统
这篇文章主要介绍了基于JAVA SSM springboot实现的抗疫物质信息管理系统,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-08-08


最新评论