Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringDataJPA笔记(12)-Table注解详解

SpringDataJPA笔记(12)-Table注解详解

作者头像
yingzi_code
发布于 2020-03-25 07:00:10
发布于 2020-03-25 07:00:10
2K10
代码可运行
举报
运行总次数:0
代码可运行

SpringDataJPA笔记(12)-Table注解详解

由于在实际使用中,有时候会遇到需要访问同一台服务器上别的数据库,但是又不想配置多数据源的情况,Table注解给我们提供了这种便利的操作

JPA在根据实体自动生成数据表关联的时候,如果实体类与其映射的数据库表名不同名时,则需要使用到Table注解来标注映射的表名,除此之外还可以指定表所属的数据库目录或模式

首先来看一下Table注解的属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
    String name() default "";

    String catalog() default "";

    String schema() default "";

    UniqueConstraint[] uniqueConstraints() default {};

    Index[] indexes() default {};
}

name

name属性用于指定数据库表名称

若不指定则以实体类名称作为表名

例如如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@Table
public class TableEntity extends AnimalEntity<Long> {
}

生成的数据库名为table_entity

catalog

catalog属性用于指定数据库实例名

一般来说数据库实例在数据源配置的时候指定了,不配置就默认使用数据源配置的默认库

如果使用catalog属性设置名称时,若数据库存在和指定名称一致的实例,新创建的表将出现在该实例中

若不存在,则会在启动的时候抛出异常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 WARN 3304 --- [           main] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL "create table aaaadb.table_entity (id bigint not null auto_increment, age integer, gmt_create datetime not null, gmt_update datetime, height integer, name varchar(255), pid bigint, sex varchar(255), weight integer, primary key (id)) engine=InnoDB" via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table aaaadb.table_entity (id bigint not null auto_increment, age integer, gmt_create datetime not null, gmt_update datetime, height integer, name varchar(255), pid bigint, sex varchar(255), weight integer, primary key (id)) engine=InnoDB" via JDBC Statement
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:277) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:207) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:314) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1237) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) [spring-orm-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) [spring-orm-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) [spring-orm-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378) [spring-orm-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) [spring-orm-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) [spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) [spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) [spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) [spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) [spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) [spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) [spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
	at com.mt.demo.jpa.SpringBootJpaDemoApplication.main(SpringBootJpaDemoApplication.java:10) ~[classes/:na]
Caused by: java.sql.SQLSyntaxErrorException: Unknown database 'aaaadb'
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.19.jar:8.0.19]
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.19.jar:8.0.19]
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.19.jar:8.0.19]
	at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:764) ~[mysql-connector-java-8.0.19.jar:8.0.19]
	at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) ~[mysql-connector-java-8.0.19.jar:8.0.19]
	at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-3.4.2.jar:na]
	at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-3.4.2.jar:na]
	at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
	... 34 common frames omitted
uniqueConstraints

uniqueConstraints属性用于设定约束条件

例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Table(uniqueConstraints={@UniqueConstraint(name = "name_key", columnNames={"name"})})

查看数据库,对应SQL语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UNIQUE KEY `name_key` (`name`)

这里建议指定name属性,以防止在不同情况下生成的name不同,引起一些问题

联合约束

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Table(uniqueConstraints={@UniqueConstraint(name = "name_age_key", columnNames={"name", "age"})})

对应数据库语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UNIQUE KEY `name_age_key` (`name`,`age`)
indexes

表的索引,通过使用 @Index 注解来声明,仅在允许自动更新数据库表结构的场景中起到作用,默认没有其他额外的索引

例如, 默认是不唯一的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Table(indexes={@Index(name = "name_index", columnList="name")})

数据库对应SQL语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
KEY `name_index` (`name`)

如果添加了unique = true,则和约束的效果是一样的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Table(indexes={@Index(name = "name_index", columnList="name", unique = true)})

数据库语句为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UNIQUE KEY `name_index` (`name`)

联合索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Table(indexes={@Index(name = "name_age_index", columnList="name, age", unique = true)})

同样和约束时一样的SQL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UNIQUE KEY `name_age_index` (`name`,`age`)
schema

目前schema在mysql中的作用未知,怎么设置好像都没有什么用处,后续有空再研究看看

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
牛的,很有用
牛的,很有用
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
WordPress终极优化篇2—Nginx+Redis Object Cache+Redis+opcache
Redis是一个可运行在内存中的数据库,所以如果拿来当作缓存器,并且配合持久化处理,能极大提升网站性能及访问速度
用户6948990
2025/04/03
1090
WordPress终极优化篇2—Nginx+Redis Object Cache+Redis+opcache
宝塔面板如何安装Memcached插件来加速wordpress访问
目前网站服务器带宽比较贵,在有限的小水管带宽前提下,如何加速wordpress访问倒是个难题,蜗牛般的速度强制劝退不少访问者,但是加钱加带宽嘛,又舍不得,现在图图来教小白们如何加速wordpress前后台访问,本篇文章就将配置方法分享给大家。
图图网
2021/08/28
1.3K0
宝塔面板如何安装Memcached插件来加速wordpress访问
宝塔BT面板+wordpress如何开启Memcached缓存,让网站飞起来
宝塔BT面板+wordpress如何开启Memcached缓存,让网站飞起来,主要减少查询,提升网站访问速度,降低卡顿的风险,减轻服务器压力
wordpress建站吧
2019/05/28
2.5K0
WordPress启用memcached动态缓存以及报错解决
张戈博客目前用的是Nginx 的 fastcgi 缓存方案,属于纯净态缓存模式,所以前台登录态什么的基本都没了。如果要兼顾前台登录态,又想速度快,有没有解决方案? 之前在分享张戈博客优化方案时提到,要
张戈
2018/03/21
1.8K0
WordPress启用memcached动态缓存以及报错解决
WordPress宝塔开启Memcached,加速网站访问。
Memcached 对象缓存为 WordPress 对象缓存提供了一个持久的后端。
Kit
2021/07/24
4.1K3
wordpress配置Memcached缓存
WordPress用Memcached缓存也已经半年之久了。对博客的访问速度提升还是很明显的。之前写过一篇文章介绍Memcached缓存以及如何部署(通过WPJAM Basic插件实现)
AlexTao
2019/07/16
3.4K0
wordpress配置Memcached缓存
WordPress优化-让17CE.COM 测速不在死机
这里我采用的是WP Super Cache + Memcached 当然也可以使用WP Super Cache + Redis 下面我会教大家如何进行使用。
残浔
2023/05/11
6060
WordPress优化-让17CE.COM 测速不在死机
【说站】WordPress安装memcached扩展实现网站加速(详细)
介绍一下WordPress网站如何安装Memcached扩展,搞定WP网站加速的问题,编程笔记也看了不少的教程,基本上千篇一律吧,这里介绍的memcached安装教程也记录了品编程笔记安装Memcached扩展过程中遇到的一些问题,最终品自行博客亲测成功。
很酷的站长
2022/11/24
1.6K0
【说站】WordPress安装memcached扩展实现网站加速(详细)
宝塔面板安装memcached并在WP使用batcache
宝塔面板添加memcached可以有效加速服务器访问速度,提高网站的用户体验。不过在实际使用中,博主发现很多新手有一个误区,就是添加了错误的memcached组件,导致起不到正常加速服务器的效果。本文分享一下误区在哪里以及应该怎么安装是正确的加速组件。
可定
2020/04/20
1K0
宝塔面板安装memcached并在WP使用batcache
wordpress网站利用Memcached加载速度优化
Memcached 是一种高性能的分布式内存对象缓存系统,在动态程序中使用 Memcached, 既能提高访问的速度,同时还减低了数据库的负载。
陌涛
2021/01/23
6130
使用memcache对wordpress优化,提速
一个部署在虚拟机中( 虚拟机安装memcache缓存),然后用这个优化的版本跟本地开发环境对比.
猿哥
2019/07/25
7440
WordPress使用Redis和opcache为网站加速教程
相信建站的朋友都十分关心网站速度问题了,玖柒的小窝一直在强调极速优化这次词语,同时在之前的很多文章中我也简单的介绍了子比主题的关于速度优化的一些原理。理论上来讲使用子比主题搭配一个不是太差的服务器,那么就已经很快了,如果你想让你的网站变得更快,那么看了这篇文章,我相信完全够了。
玖柒的小窝
2021/10/22
2.8K0
WordPress使用Redis和opcache为网站加速教程
教大家一个WPJAM Basic如何开启Memcacached内存缓存和对应的 WordPress 插件
Memcached 是一种高性能的分布式内存对象缓存系统,在动态程序中使用 Memcached, 既能提高访问的速度,同时还减低了数据库的负载。
Hello-1
2022/08/30
9980
教大家一个WPJAM Basic如何开启Memcacached内存缓存和对应的 WordPress 插件
网站速度优化之“缓存技术”、有效提升页面生成的时间!
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
QUXINGDONG.COM
2018/11/18
1.1K0
网站速度优化之“缓存技术”、有效提升页面生成的时间!
部署Memchached
在安装LNMP时直接一键安装memcached,不赘述,对于memcache和memcached的区别,引用一下“简单来说:
空空裤兜
2023/03/03
3970
部署Memchached
实用教程:WordPress安装memcached对网站进行缓存加速
经常会看到wordpress使用redis或者memcache缓存进行加速,当然本站也不例外,由于使用的是宝塔和果酱大佬的wpjam插件,本着能少装插件就少装插件的原则,推荐使用memcached对wordpress进行加速,与使用redis加速差不多。
深白鸭
2023/02/22
1.2K0
实用教程:WordPress安装memcached对网站进行缓存加速
Batcache 插件给服务器提速的安装过程
魏艾斯博客写过有关开启 memcached,opcache 缓存的文章,前者是内容缓存插件,后者是 php 缓存插件,本来以为服务器优化折腾到此就差不多了,这几天在@张戈博客看到一篇文章,原来开启 memcached 之后,还可以再上一个 batcache 插件,用来把 html 静态文件放到内存中去,于是经过一番测试,在云服务器上安装了这个插件,下面写出相关操作步骤。
魏艾斯博客www.vpsss.net
2018/08/22
1.5K0
Batcache 插件给服务器提速的安装过程
一文详解 WordPress 中使用 Memcached 的常见问题
前面我们介绍了使用 Memcached 内存缓存来提高 WordPress 站点速度,虽然感觉介绍得非常清楚,但是还是有很多小伙伴还是会碰到问题,今天就把其中的常见的问题整理到一起发布,方便大家查看和 Debug,也欢迎收藏和分享该文,帮到更多的人解决问题。
Denis
2023/04/13
6080
一文详解 WordPress 中使用 Memcached 的常见问题
在wordpress上配置memcached
Memcached 是一种高性能的分布式内存对象缓存系统。在动态应用,Memcached 既能提高访问的速度,同时还减低了数据库的负载。
EltonZheng
2021/01/22
7350
使用 Memcached 内存缓存来提高 WordPress 站点速度
很多人问我 WordPress 怎么速度快,一般简单回答就是装 Memcached,这真的不是敷衍了事,一点不夸张,装上 Memcached 就可以让 WordPress 快上好几倍,但是真正用好 WordPress,还是需要对 WordPress 有更深的了解。
Denis
2023/04/13
7950
使用 Memcached 内存缓存来提高 WordPress 站点速度
推荐阅读
相关推荐
WordPress终极优化篇2—Nginx+Redis Object Cache+Redis+opcache
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验