当前位置:首页>开发>正文

hibernate怎么通过实体类创建数据库表 hibernate如何根据需要创建新表

2023-04-21 04:52:02 互联网 未知 开发

 hibernate怎么通过实体类创建数据库表 hibernate如何根据需要创建新表

hibernate怎么通过实体类创建数据库表

答案转载自:http://blog.csdn.net/lixuyuan/article/details/8057Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步。

如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码
Xml代码update

update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列。

还有其他的参数:
create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。

create-drop:启动hibernate时,自动创建表,程序关闭时,自动把相应的表都删除。所以程序结束时,表和数据也不会再存在。

PS:数据库要预先建立好,因为hibernate只会建表,不会建库

hibernate如何根据需要创建新表

那就不能使用Hibernate的ORM特点了,只能自己用SQL实现,Hibernate也可以支持直接SQL语言操作。

不过,为每个用户创建一张表,这本来就很不合理,非常难以管理,当用户数成千上万时,就会有成千上万的表,数据库就不能支持这么多的表,性能会很低。但数据表里有上百万条的记录,数据库还是很轻松应付,所以不应该通过无限增加表的数量来实现,而是修改表结构,在有限的表里更高性能的存储更多用户数据。

如果用户数很多,而且每条记录的列数很多,应该是考虑表的横行切割(一部分记录行放在一个表,另一部分的记录行放在另一个表,减轻记录行太多,而引起的表负担)或纵切割(记录行里的一部分列放在一个表,另一部分的列放在另一个表,减轻一条记录太大,而引起的表负担),或是这两种的混合。
还有比较简单的方式,通过修改范式设计(例如通过一对一关键关联,把用户的数据分别放在两个表里),实现更高性能的数据存放

hibernate自动建表问题

在开始菜单中,找到oracle的Database Control - 数据库实例名,这个菜单,点击进入;
在服务器--存储--表空间这项里,点击后有表空间列表,可以增改。
服务器--安全性--用户这项,可以增改用户,并指定权限,要有sys权限。

不同的表空间,是可以建立重复表名的。

hibernate自动建表 何时建立

update就需要这一句话~

create:表示启动的时候先drop,再create
create-drop: 也表示创建,只不过再系统关闭前执行一下drop
update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新
validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新

spring和hibernate整合时怎样设置自动生成数据库的表

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" p:dataSource-ref="dataSource"> org.hibernate.dialect.MySQLInnoDBDialect true true update
起作用的是update这一句,自动建表

关于spring整合hibernate的时候自动创建表的问题

update
漏了"hibernate",若没写全会被框架认为没配置,所以不会导出schema;

关于update和create:
(1)update 但schema发生改变时进行更新,比如添加字段,保留原有数据
(2)create 每次运行重新创建schema,如果表存在,先删除再创建,原有数据丢失;
update也会创建表,以下是配置>updateif ( table.isPhysicalTable() ) { TableMetadata tableInfo = databaseMetadata.getTableMetadata( table.getName(), ( table.getSchema() == null ) ? defaultSchema : table.getSchema(), ( table.getCatalog() == null ) ? defaultCatalog : table.getCatalog(), table.isQuoted() ) if ( tableInfo == null ) { script.add( table.sqlCreateString( dialect, mapping, defaultCatalog, defaultSchema ) ) } else { Iterator subiter = table.sqlAlterStrings( dialect, mapping, tableInfo, defaultCatalog, defaultSchema ) while ( subiter.hasNext() ) { script.add( subiter.next() ) } } Iterator comments = table.sqlCommentStrings( dialect, defaultCatalog, defaultSchema ) while ( comments.hasNext() ) { script.add( comments.next() ) } } } 表若不存在,也会被创建.

使用hibernate注解自动建表

@Entity
@Table(name="a")
public class A {
@Id
private String id
private String name
@ManyToMany(targetEntity=C.class,cascade={CascadeType.ALL},mappedBy="a")
private List c=new ArrayList()
@ManyToMany(targetEntity=B.class,cascade={CascadeType.ALL})
@JoinTable(name="a_b",joinColumns=@JoinColumn(name="a_id"),inverseJoinColumns=@JoinColumn(name="b_id"))
private Listb=new ArrayList() public String getId() { return id } public void setId(String id) { this.id = id } public String getName() { return name } public void setName(String name) { this.name = name } public List getC() { return c } public void setC(List c) { this.c = c } public List getB() { return b } public void setB(List b) { this.b = b } } @Entity @Table(name="b") public class B { @Id private String id private String name @ManyToMany(targetEntity=A.class,cascade={CascadeType.ALL},mappedBy="b") private List a=new ArrayList() @ManyToMany(targetEntity=C.class,cascade={CascadeType.ALL}) @JoinTable(name="b_c",joinColumns=@JoinColumn(name="b_id"),inverseJoinColumns=@JoinColumn(name="c_id")) private List c=new ArrayList() public String getId() { return id } public void setId(String id) { this.id = id } public String getName() { return name } public void setName(String name) { this.name = name } public List getA() { return a } public void setA(List a) { this.a = a } public List getC() { return c } public void setC(List c) { this.c = c } } @Entity @Table(name="c") public class C { @Id private String id private String name @ManyToMany(targetEntity=A.class,cascade={CascadeType.ALL}) @JoinTable(name="c_a",joinColumns=@JoinColumn(name="c_id"),inverseJoinColumns=@JoinColumn(name="a_id")) private List a=new ArrayList() @ManyToMany(targetEntity=B.class,cascade={CascadeType.ALL},mappedBy="c") private List b=new ArrayList() public String getId() { return id } public void setId(String id) { this.id = id } public String getName() { return name } public void setName(String name) { this.name = name } public List getA() { return a } public void setA(List a) { this.a = a } public List getB() { return b } public void setB(List b) { this.b = b } }

hibernate自动建表(createTable)bit->tinyint

mysql数据库中 BOOLEAN的类型默认就是BIT(1)吧
因为就象ORACLE中的返回的NUMBER都是LONG型一样 如果想在JAVA中得到INT型 就必须用封装类 转换下,因为我MYSQL用的少 基本都有ORACLE所以我不能确定,你可以尝试下!
希望对你有帮助!

最新文章

随便看看