JPA如何设置表名和实体名,表字段与实体字段的对应

目录
  • JPA设置表名和实体名,表字段与实体字段的对应
  • JPA数据库表实体命名规则
    • application.properties 写法

JPA设置表名和实体名,表字段与实体字段的对应

首先 你的jpaProperties配置项中要有

<prop key="hibernate.hbm2ddl.auto">update</prop>

这样就可以直接有对象映射为表结构,实现面向对象向数据库转化。

实体的名字可以和表名字不一样,字段名字和实体的名字也可以不一样。

package com.shiroweb.entitys;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="shiro_user")//设置数据库中表名字
public class ShiroUser {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;
 @Column(name="USER_NAME")<span style="font-family: Arial, Helvetica, sans-serif;">//设置数据库中字段名字,也可以设置长度,是否为空等属性</span>
 private String username;
 @Column(name="PASS_WORD")
 private String password;
 @Column(name="CREATE_DATE")
 private Date createDate;
 @Column(name="USER_ID")
 private String userId;
 public String getUserId() {
  return userId;
 }

 public void setUserId(String userId) {
  this.userId = userId;
 }

 public Long getId() {
  return id;
 }

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

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public Date getCreateDate() {
  return createDate;
 }

 public void setCreateDate(Date createDate) {
  this.createDate = createDate;
 }
}

JPA数据库表实体命名规则

Unknown column 'user0_.create_time' in 'field list'

数据库,表字段命名是驼峰命名法(createTime),Spring data jpa 在操作表的时候,生成的sql语句中却是create_time, 表字段不对照,

Spring data jpa基于hibernate-core-5.2.16.final.jar

这是由于jpa中hibernate的字段全名策略引起的,默认是SpringPhysicalNamingStrategy,在hibernate的包:org.hibernate.boot.model.naming中有一堆的命名策略,当然也可以实现

PhysicalNamingStrategy自定义实现。

application.properties 写法

1、无修改命名

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

2、遇到大写字母 加”_”的命名

spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • spring data jpa如何只查询实体部分字段

    需求 现在有一张article表,用来储存文章,对应的实体类如下: package com.qianyucc.blog.model; import lombok.*; import javax.persistence.*; /** * @author lijing * @date 2019-08-05 14:28 * @description 文章 */ @Data @Entity @Table(name = "article") public class Article { @Id

  • Spring Data Jpa 自动生成表结构的方法示例

    想在部署的时候随应用的启动而初始化数据脚本,这不就是Spring Data Jpa中的自动生成表结构,听起来特别简单,不就是配置Hibernate的ddl-auto嘛,有什么好说的,是个人都知道.当初我也是这样认为,实际操作了一把,虽然表是创建成功了,但是字段注释,字符集以及数据库引擎都不对,没想到在这些细节上翻车了. 毕竟开翻的车还要自己扶起来,于是在这记录一下. 注:本文中使用的Spring Data Jpa版本为2.1.4.RELEASE 以MySQL为例,我这边举个例子: import

  • spring data jpa 查询自定义字段,转换为自定义实体方式

    目标:查询数据库中的字段,然后转换成 JSON 格式的数据,返回前台. 环境:idea 2016.3.4, jdk 1.8, mysql 5.6, spring-boot 1.5.2 背景:首先建立 entity 映射数据库(非专业 java 不知道这怎么说) @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long

  • JPA如何设置表名和实体名,表字段与实体字段的对应

    目录 JPA设置表名和实体名,表字段与实体字段的对应 JPA数据库表实体命名规则 application.properties 写法 JPA设置表名和实体名,表字段与实体字段的对应 首先 你的jpaProperties配置项中要有 <prop key="hibernate.hbm2ddl.auto">update</prop> 这样就可以直接有对象映射为表结构,实现面向对象向数据库转化. 实体的名字可以和表名字不一样,字段名字和实体的名字也可以不一样. pack

  • python 获取sqlite3数据库的表名和表字段名的实例

    Python中对sqlite3数据库进行操作时,经常需要用到字段名,然而对于sqlite使用select语句并不能象MySql等数据库一样返回带字段名的字典数据集.特别是对于一个不熟悉的sqlite数据库,写代码时如果需要借助工具查看,那其实是有点对不起python的. 下面两段代码就可以轻易获得一个sqlite数据库中所有数据表名和字段名的列表: # python 获取sqlite3数据库mydb.db中的表名和表字段名 import sqlite3 conn=sqlite3.connect(

  • JPA的多表复杂查询的方法示例

    最近工作中由于要求只能用hibernate+jpa 与数据库进行交互,在简单查询中,jpa继承CrudRepository接口 ,然后利用jpa的方法命名规范进行jpql查询,然而在进行复杂查询时,需要继承JpaSpecificationExecutor接口 利用Specification 进行复杂查询,由于我自己就遇到了这一问题,查了好多资料,虽然有方法,但是都没有一个详细的讲解,以至于知道方法而不能很好的利用jpa复杂查询的方便之处.我将举几个栗子,来详细的说一下我自己在使用jpa多表复杂查

  • springboot jpa分库分表项目实现过程详解

    这篇文章主要介绍了springboot jpa分库分表项目实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 分库分表场景 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降严重.此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间. 分库分表用于应对当前互联网常见的两个场景--大数

  • pgsql添加自增序列、设置表某个字段自增操作

    添加自增序列 CREATE SEQUENCE 表名_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; 设置表某个字段自增 alter table表名 alter column id set default nextval('表名_id_seq'); 从当前最大id依次递增 select setval('表名_id_seq',(select max(id) from 同一个表名)); 大写字符的表需要加双引号.例

  • JPA @Basic单表查询如何实现大字段懒加载

    JPA @Basic单表查询实现大字段懒加载 近期看了JPA@Basic注解的使用,看到该注解可以设置字段的懒加载. 1.以前碰到的懒加载: 我们知道,多表关联的时候,我们是可以配置懒加载的,比如一个Company类,里面可以关联员工表,办公设备表,当我们查看公司信息的时候,我们并不需要直接加载员工表,办公设备表,只需要在用户查看员工,查看设备的时候再加载,这样可以提高加载效率. 长话短说,大概是这样子的 @Entity @Table(name = "Company") public

  • Spring Data JPA 实现多表关联查询的示例代码

    多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询后的结果,这里介绍第二种方式. 一.一对一映射 实体 UserInfo :用户. 实体 Address:家庭住址. 这里通过外键的方式(一个实体通过外键关联到另一个实体的主键)来实现一对一关联. 实体类 1.实体类 UserInfo.java package com.johnfnash.learn.domain; import java.io.Ser

  • linux下快速列出局域网中所有主机名(计算机名)的脚本

    最近有列出局域网中所有主机名的需求(SMB协议里的),但是findsmb命令总是列不全,搜了搜网上也没什么现成的解决方案,于是自己写了个python脚本 脚本会扫描局域网arp表中所有ip,并尝试解析其主机名,这样可以较为彻底地列出相关信息. 注意,运行这个脚本需要samba-common-bin和arp-scan这两个包,没有的请先apt install它们. 用法:直接运行或用python3运行,然后输入需要扫描的网卡名(network interface)(不知道的运行ifconfig可查

  • jQuery获取和设置表单元素的方法

    jQuery提供了val()方法,使用它我们可以快速地获取和设置表单的文本框.单选按钮.以及单选按钮的值.使用val()不带参数,表示获取元素的值使用val()给定参数,则表示把值赋给元素 如下: 复制代码 代码如下: //获取值alert($("input#mytextbox").val());alert($("select#mylist").val());alert($("input#myradio").val()); //设置值$(&quo

随机推荐