相关疑难解决方法(0)

#Hibernate hbm2ddl.auto配置的可能值是什么,它们做了什么

我真的想知道更多有关更新,导出和可以提供给hibernate.hbm2ddl.auto
我需要知道何时使用更新的值的更多信息,何时不知道?还有什么选择?

这些是可能发生在DB上的变化:

  • 新表
  • 旧表中的新列
  • 列已删除
  • 列的数据类型已更改
  • 列的类型更改了其属性
  • 桌子掉了
  • 列的值已更改

在每种情况下,最佳解决方案是什么?

java hibernate hbm2ddl

1046
推荐指数
10
解决办法
97万
查看次数

Spring boot ddl自动生成器

我正在使用spring boot spring.jpa.hibernate.ddl-auto=create,但是当应用程序重新启动时,所有表都会丢弃并再次创建.有没有办法避免现有表的重新创建?

java spring hibernate spring-boot

31
推荐指数
2
解决办法
6万
查看次数

Hibernate + MySQL:如何为数据库和表设置编码utf-8

我的系统运行在Linux Mandriva,RDBMS - MySQL 5上.我需要使用UTF-8创建数据库和表.

这是hibernate.cfg.xml的一个片段-

... 
 <property name="hibernate.hbm2ddl.auto">create-drop</property>   
 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
 <property name="hibernate.connection.characterEncoding">utf8</property> 
...
Run Code Online (Sandbox Code Playgroud)

my.cnf -

# The MySQL server
[mysqld]
...
default-character-set=cp1251
character-set-server=cp1251
collation-server=cp1251_general_ci
init-connect="SET NAMES cp1251"
skip-character-set-client-handshake
...
[mysqldump]
...    
default-character-set=cp1251
...
Run Code Online (Sandbox Code Playgroud)

有些课,例如 -

@Entity
@Table(name = "USER")
public class User {
    @Id 
    @Column(name = "USERID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "USERNAME")
    private String name;

    @Column(name = "USERPASSWORD")
    private String password;

    @Column(name = "USERIP")
    private String ip;
        // …
Run Code Online (Sandbox Code Playgroud)

mysql linux hibernate jpa character-encoding

25
推荐指数
5
解决办法
7万
查看次数

使用Hibernate @Index注释在DB上创建索引

我的项目中有注释驱动的hibernate功能.

现在我想在列上创建索引.我目前的列定义是

@NotNull
@Column(name = "hash")
private String hash;
Run Code Online (Sandbox Code Playgroud)

我在@Index这里添加注释.

@NotNull
@Column(name = "hash")
@Index(name="hashIndex")
private String hash;
Run Code Online (Sandbox Code Playgroud)

然后DROP TABLE并重启Tomcat服务器.在实例化服务器之后,会创建表,但我无法在后续查询中看到新索引.

SHOW INDEX FROM tableName
Run Code Online (Sandbox Code Playgroud)

期望用新索引构造表.我正在使用带有MySQL的InnoDB.

java annotations hibernate hibernate-annotations database-indexes

18
推荐指数
2
解决办法
3万
查看次数

如何使用Hibernate处理Spring Boot中的数据库迁移?

我的数据库背景来自Django框架(python).在Django中,开始使用数据库迁移很容易:Django迁移.Django框架提供了基于模型创建迁移的工具,以及在数据库上应用迁移的工具.我认为这种做法在开发和生产中都有效.您不必自己编写迁移,框架为您创建了它们.

现在我已经启动了一个Spring Boot和Hibernate项目.我将我的应用程序配置为使用带有JPA的hibernate.有了这些设置,我现在需要知道我的框架如何处理数据库迁移?我的意思是,如果我更改列,无论是类型,还是可能删除它,那么如何将数据库迁移到更改?我知道spring boot会在启动时自动检测列更改,并根据模型(Entity)创建不存在的列.我想这与变量有关

spring.jpa.hibernate.ddl-AUTO

但它如何处理现有的数据库对象?它是否也将列添加到它们中,具有什么价值?我设置的默认值?如果我更改列类型怎么办?它可以处理变化吗?从长远来看,这些设置和spring-boot自动数据库管理可能还不够?

我想知道的是,有关如何使用Spring Boot和hibernate组合处理数据库迁移的最佳实践是什么?我相信这个组合的大多数人如何处理迁移有一个标准?我希望它和Django一样简单...我知道flyway,但不知道我是否真的需要它,或者它是否与我的这种组合(包括弹簧启动和休眠)使用得多.

java spring hibernate jpa spring-boot

15
推荐指数
1
解决办法
8292
查看次数

不使用hibernate.hbm2ddl.auto,如何将所有初始架构导出到Flyway?

我正处于JEE开发的近期阶段.有很多建议不要在生产中使用Hibernate的hbm2ddl.auto,我决定删除它.

所以现在,我发现了Flyway,这对于未来的数据库更改和迁移似乎很有用,但我在第一步陷入困境:我有很多实体,一些实体继承自基础实体.这使得CREATE语句非常复杂.

创建第一个迁移文件的最佳做法是什么?

谢谢!

java hibernate java-ee flyway

14
推荐指数
1
解决办法
930
查看次数

在Spring启动应用程序中未在多个数据库中创建表

我正在开发spring boot多租赁应用程序.我已经配置了多个数据源,如下所示:

application.properties

spring.multitenancy.datasource1.url=jdbc:mysql://localhost:3306/db1
spring.multitenancy.datasource1.username=root
spring.multitenancy.datasource1.password=****
spring.multitenancy.datasource1.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

spring.multitenancy.datasource2.url=jdbc:mysql://localhost:3306/db2
spring.multitenancy.datasource2.username=root
spring.multitenancy.datasource2.password=****
spring.multitenancy.datasource2.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

spring.multitenancy.datasource3.url=jdbc:mysql://localhost:3306/db3
spring.multitenancy.datasource3.username=root
spring.multitenancy.datasource3.password=****
spring.multitenancy.datasource3.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
Run Code Online (Sandbox Code Playgroud)

DataSourceBasedMultiTenantConnectionProviderImpl.java

@Component
public class DataSourceBasedMultiTenantConnectionProviderImpl extends AbstractDataSourceBasedMultiTenantConnectionProviderImpl {

    private static final long serialVersionUID = 8168907057647334460L;
    private static final String DEFAULT_TENANT_ID = "tenant_1";

    @Autowired
    private DataSource dataSource1;

    @Autowired
    private DataSource dataSource2;

    @Autowired
    private DataSource dataSource3;

    private Map<String, DataSource> map;

    @PostConstruct
    public void load() {
        map = new HashMap<>();
        map.put("tenant_1", dataSource1);
        map.put("tenant_2", dataSource2);
        map.put("tenant_3", dataSource3);
    }

    @Override
    protected DataSource selectAnyDataSource() {
        return map.get(DEFAULT_TENANT_ID);
    } …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate spring-data-jpa spring-boot

11
推荐指数
1
解决办法
1497
查看次数

引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'test.spring_session'不存在 - Spring Boot

我正在发展springboot-springsession-jdbc-demo.当我只是运行代码时,我得到以下错误.它看起来我需要设置一些属性application.properties,以便事先创建模式/表.必需的配置已经放置,但仍然会出错.该代码存在于https://github.com/sivaprasadreddy/spring-session-samples中

参考错误:

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM SPRING_SESSION WHERE LAST_ACCESS_TIME < ?]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.spring_session' doesn't exist
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) ~[spring-jdbc-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) ~[spring-jdbc-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649) ~[spring-jdbc-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:870) ~[spring-jdbc-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:931) ~[spring-jdbc-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:941) ~[spring-jdbc-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.session.jdbc.JdbcOperationsSessionRepository$6.doInTransaction(JdbcOperationsSessionRepository.java:481) ~[spring-session-1.2.1.RELEASE.jar:na]
    at org.springframework.session.jdbc.JdbcOperationsSessionRepository$6.doInTransaction(JdbcOperationsSessionRepository.java:478) ~[spring-session-1.2.1.RELEASE.jar:na]
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) ~[spring-tx-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.session.jdbc.JdbcOperationsSessionRepository.cleanUpExpiredSessions(JdbcOperationsSessionRepository.java:478) ~[spring-session-1.2.1.RELEASE.jar:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at …
Run Code Online (Sandbox Code Playgroud)

spring spring-jdbc spring-boot

10
推荐指数
2
解决办法
2651
查看次数

如何在使用JPA进行映射时增加mysql中String的长度

我在JPA遇到了一些麻烦.如果有人能提供解决方案,我会非常感激.用JPA(我使用的是MySQL DB),比方说,我有一个映射如下的类:

@Entity    
class Employee{    
   int id;    
   String employeeName;    
 //getters and setters...   
 }
Run Code Online (Sandbox Code Playgroud)

映射到表时,我看到String varchar(255)在Mysql中映射.但是,假设我有一个名称超过255个字符的员工,它会显示数据截断错误.

我知道我们可以通过在Employee列中添加"length"属性来解决这个问题:

@column(length=1000)    
String employeeName;
Run Code Online (Sandbox Code Playgroud)

这是唯一可行的方法吗?我想,如果我们只是在java中映射到String,数据库将动态分配长度.

java mysql orm jpa

8
推荐指数
2
解决办法
2万
查看次数

在使用hibernate映射的表中添加列,而不会丢失现有数据

我有一个名为Person的表,我已经在hibernate中映射了我已经有一些我不想放松的数据了.我需要添加一个名为address的新列,任何想法如何在hibernate中做到这一点?

提前致谢..

java database hibernate

8
推荐指数
2
解决办法
2万
查看次数