hibernate自动建表问题 hibernate自动建表 何时建立
hibernate自动建表问题
在开始菜单中,找到oracle的Database Control - 数据库实例名,这个菜单,点击进入;
在服务器--存储--表空间这项里,点击后有表空间列表,可以增改。
服务器--安全性--用户这项,可以增改用户,并指定权限,要有sys权限。
不同的表空间,是可以建立重复表名的。
hibernate自动建表 何时建立
update就需要这一句话~
create:表示启动的时候先drop,再create
create-drop: 也表示创建,只不过再系统关闭前执行一下drop
update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新
validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
hibernate自动建表(createTable)bit->tinyint
mysql数据库中 BOOLEAN的类型默认就是BIT(1)吧
因为就象ORACLE中的返回的NUMBER都是LONG型一样 如果想在JAVA中得到INT型 就必须用封装类 转换下,因为我MYSQL用的少 基本都有ORACLE所以我不能确定,你可以尝试下!
希望对你有帮助!
使用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动态创建表
你这种设计有问题啊。每注册一个会员创建一个表,重新加载hbm,是不是还要刷新一次sessionFactory?如果有人不停注册,那你的服务还跑不跑了?
你计算贡献值完全可以放在一个表中通过1对多或者HQL来过滤。
如果非要分表做,那就远离hbm,通过session.createSQLQuery()调用本地sql语句对数据库直接进行操作。
=================
理解错了,抱歉。这个可以结合你的数据库来看了。 我对pgsql比较熟, pgsql支持子表, 可以建立一个父表,然后每个月建立一个子表,查询的时候直接查询父表, pgsql会根据查询条件里的时间范围自动决定是在所有子表中查还是在特定子表中查。select * from 父表是可以检索到所有值的,这个机制在物理上又实现了数据水平切分和可管理性。
所以如果支持父-子表机制的数据库里,可以通过数据库本身的特性来实现,hbm不需要改变,映射到父表即可。insert时候会自动写入子表。如果子表不存在则写入父表。
如果在不支持父-子机制的数据库里,查询通过createSQLQuery来做,Hibernate支持将未映射的查询结果Transform为特定的类型的对象。例如:
query.setResultTransformer(Transformers.aliasToBean(MyObject.class))
query.list()
insert通过时间字段计算出要写入的数据表,通过insert来执行写入。
总之,我给出的意见就是,支持子表特性的数据库HBM来实现,不支持子表特性或者想脱离数据库依赖那就用SQL来实现。
hibernate能动态生成数据库表吗?
可以
如果你是单独使用hibernate的,请在hibernate.cfg.xml里面的sessionfactory下配置这个属性
如果你是使用SSH组合框架的,而且由SPRING管理sessionfactory的,请在applicationContext.xml里面配置
数据库方言 是否打印SQL 建表语句(参考值:validate | update | create | create-drop ,一般用update)