标签: hbm2ddl

Hibernate:hibernate.hbm2ddl.auto = update show生成的sql

我希望传递给Hibernate的SessionFactory

hibernate.hbm2ddl.auto=update
Run Code Online (Sandbox Code Playgroud)

并在日志文件中看到生成的sql语句.是不是没有java编码(知道如何用SchemaExport实现结果,但希望hibernate有"in box"解决方案)

java hibernate hbm2ddl

6
推荐指数
1
解决办法
9544
查看次数

Hibernates的问题hbm2ddl.auto = validate和MySQL文本类型

我试图在我继承的项目上启用hbm2ddl.auto = validate.我现在为String属性获得了许多错误的列类型异常,这些异常使用text或mediumtext(MySQL数据库)进行映射.

映射是:

@Column(name = "DESCRIPTION", nullable = false, length = 65535)
@Length(max = 65535)
@NotNull
public String getDescription() {
    return this.description;
} 
Run Code Online (Sandbox Code Playgroud)

db中的数据类型是'text'(utf8_general_ci).

我认为这应该是正确的映射,但Hibernate抱怨它发现了文本,但期待长篇大论.

我检查了hibernate配置,但没有指定对话框.我已经添加

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
Run Code Online (Sandbox Code Playgroud)

但这似乎没有什么区别.

我知道我可以将columnDefinition ="text"添加到映射中,但我必须在很多地方这样做,恕我直言,映射应该是正确的.出了什么问题?有任何想法吗?

谢谢

java mysql hibernate hbm2ddl

6
推荐指数
1
解决办法
5001
查看次数

在Mysql上使用ddl模式生成时,未生成ON DELETE CASCADE选项

在Tomcat Web应用程序上运行的Maven-Spring-Hibernate-MySql中,我正在使用hibernate ddl来生成MySQL5InnoDBDialect的数据库模式.

除了外键的级联选项之外,生成的模式很好.例如,我有这样的结构:

保存用户详细信息对象的用户对象,两者共享相同的密钥:

@Entity
@Table(name = "Users")
public class User implements Serializable {

    private static final long serialVersionUID = -359364426541408141L;

    /*--- Members ---*/

    /**
     * The unique generated ID of the entity.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "User_Id")
    protected long id;

    @Getter
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user", optional = true)
    protected UserDetails userDetails;

...

}
Run Code Online (Sandbox Code Playgroud)

而用户详细信息:

@Entity
@Table(name = "UserDetails")
public class UserDetails implements Serializable {

    private static final long serialVersionUID = …
Run Code Online (Sandbox Code Playgroud)

mysql hibernate cascade hbm2ddl cascading-deletes

6
推荐指数
1
解决办法
6093
查看次数

Hibernate Validator:hbm2ddl忽略EmbeddedId约束

这里有一个相当具体的问题,但它现在
让我烦恼了一天:我在PostgreSQL 8.3上使用Hibernate Core,Annotations&Validator.

我有以下类设置:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Entry {
    @EmbeddedId
    protected EntryPK       entryPK;
    @ManyToMany
    private Set<Comment>    comments    = new HashSet<Comment>();
...

@Embeddable
public class EntryPK implements Serializable {
    @ManyToOne(cascade = CascadeType.ALL)
    private Database    database;

    @Length(max = 50)
    @NotEmpty
    private String      pdbid;
...
Run Code Online (Sandbox Code Playgroud)

我想看看长度约束在我的PostgreSQL数据库中转换为长度约束(它适用于@ Entity中的其他字段,而不是@ Embeddable's),但它似乎并不想工作..
甚至使用@IdClass代替@EmbeddedId并在@Entity中的匹配字段上应用Length约束并没有解决这个问题:数据库字段仍然是varchar 255(大约250太大了,不能满足我的需要).
有些人可能会说我不应该关心这个详细程度,但我的OCD方面拒绝放手......;)是不是可以在EmbeddedId中使用Hibernate Validator Annotations并让hbm2ddl将约束应用于数据库字段?

validation hibernate hbm2ddl

5
推荐指数
1
解决办法
947
查看次数

使用自动创建表时,Hibernate不会自动为数据库创建顺序

我想用Hibernate和Postgresql自动创建我的数据库表,但是我得到了关于序列的错误.是否可以使用Hibernate自动创建序列,还是手动生成序列?

我的实体示例:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

@Entity
@Table(uniqueConstraints = { @UniqueConstraint( columnNames =  { "id" }) })
@SequenceGenerator(name="SEQ_EXAMPLE_ID", sequenceName="example_id_seq", allocationSize=1)
public class Example {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_EXAMPLE_ID")
    private Long id;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String g
}
Run Code Online (Sandbox Code Playgroud)

Hibernate配置:

hbm2ddl.auto=create-drop
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.show_sql=true 
Run Code Online (Sandbox Code Playgroud)

例外:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not get next sequence value

org.postgresql.util.PSQLException: …
Run Code Online (Sandbox Code Playgroud)

postgresql orm hibernate sequence hbm2ddl

5
推荐指数
1
解决办法
4355
查看次数

告诉 Hibernate 的 hbm2ddl 为 @Enumerated 注解字段添加 MySQL 枚举列

我正在使用 hbm2ddl 和类似于以下的 Java 代码创建数据库表:

@Entity
public  class Filter {
    public enum Type {
        TypeA, TypeB;
    }
    @Enumerated(EnumType.STRING)
    private Type type;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但对于“type”,会创建一个 VARCHAR 列,即 DDL 代码如下所示:

CREATE TABLE IF NOT EXISTS `filter` (`type` varchar(255) DEFAULT NULL)
Run Code Online (Sandbox Code Playgroud)

但我想要的是这样的:

CREATE TABLE IF NOT EXISTS `filter` (`type` enum('TypeA','TypeB') NOT NULL)
Run Code Online (Sandbox Code Playgroud)

这是否可以在 Hibernate 中声明,最好使用注释?

或者有没有办法扩展 SchemaUpdate 并覆盖以我喜欢的方式呈现枚举字段的更改脚本部分的方法?

背景:项目的 PHP 部分使用相同的数据库,我想防止插入无效值。

mysql enums hibernate hbm2ddl

5
推荐指数
1
解决办法
1164
查看次数

如何让hibernate hbm2ddl用分号生成sql?

我使用hibernate hbm2ddl从实体类生成db模式脚本.它运行良好,但每行结束时没有分号,这使我不得不手动添加它们.有没有办法让我免于这个愚蠢的工作?

hibernate hbm2ddl

5
推荐指数
1
解决办法
1117
查看次数

你需要在Hibernate表的@id列上创建索引吗?

我是否需要为hibernate表的主键添加索引anoatation以获得不错的性能,我假设用@id标记一个字段意味着创建了一个索引

@Id
private String guid;
Run Code Online (Sandbox Code Playgroud)

但我没有注意到在生成的ddl中创建的任何内容

但是如果我添加了一个@index注释

@Id
@org.hibernate.annotations.Index(name = "IDX_GUID")
private String guid;
Run Code Online (Sandbox Code Playgroud)

然后我注意到在DDL中创建了一个索引.

所以我认为我需要为每个表执行此操作,但我的一部分认为这是非常必要的,因为hibernate肯定希望为主键创建索引作为起点?

java database indexing hibernate hbm2ddl

5
推荐指数
1
解决办法
1584
查看次数

在hibernate 5中没有使用hbm2ddl.auto = update创建的表

数据库表不是<property name="hbm2ddl.auto">update</property>设置自动创建的hibernate-cfg.xml,具有以下组合:

Java 8 + Tomcat 8 + MySQL + Hibernate 5

  1. Java版本:

    java version "1.8.0_45"
    Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
    Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
    
    Run Code Online (Sandbox Code Playgroud)
  2. MySQL版本:

    mysql  Ver 14.14 Distrib 5.6.16, for osx10.7 (x86_64) using  EditLine wrapper
    
    Run Code Online (Sandbox Code Playgroud)
  3. Tomcat版本:

    apache-tomcat-8.0.22
    
    Run Code Online (Sandbox Code Playgroud)
  4. pom.xml片段:

    <dependency>
      <groupId>org.eclipse.persistence</groupId>
      <artifactId>javax.persistence</artifactId>
      <version>2.1.0</version>
    </dependency>
    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.1-api</artifactId>
      <version>1.0.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.0.3.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>5.0.3.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-c3p0</artifactId> …
    Run Code Online (Sandbox Code Playgroud)

mysql tomcat hibernate hbm2ddl hibernate-5.x

5
推荐指数
2
解决办法
4668
查看次数

Hibernate5 - SchemaExport 将内存中的脚本作为字符串输出,而不是在磁盘上输出文件

我正在尝试使用 hibernate 5 动态生成一些数据库/表模式,如下所示:

StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().applySetting("hibernate.hbm2ddl.auto", "create")
                .applySetting("hibernate.dialect", "org.hibernate.dialect.MySQLDialect").applySetting("hibernate.id.new_generator_mappings", "true").build();
MetadataSources sources = new MetadataSources(standardRegistry);
for (Class clazz : classes) {
   sources.addAnnotatedClass(clazz);
}
MetadataImplementor metadata = (MetadataImplementor)sources.getMetadataBuilder().build();

SchemaExport export = new SchemaExport();
export.create(EnumSet.of(TargetType.SCRIPT), sources.buildMetadata());
Run Code Online (Sandbox Code Playgroud)

我感兴趣的是将结果输出到字符串中,而不是将其写入输出文件。

java configuration jpa hbm2ddl hibernate-5.x

5
推荐指数
0
解决办法
273
查看次数