hibernate通过annotation自动生成数据库表
2011-08-24 14:13
423 查看
在生成数据库表的过程中,
报 javax.persistence.OneToMany.orphanRemoval()Z异常的解决方法:去掉myeclipse中的j2ee包居然就可以了!!
@oneToMany(mappedBy="另一方类中对应的属性名(外键)",cascade=CascadeType.ALL,fetch=FetchType.EAGER)就相当于xml配置中的inverse=true
在单向关系中没有mappedBy。
mappedBy一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
主控方相当于拥有指向另一方的外键的一方。
mappedBy指定的是不需要维护关系的一端
@ManyToOne
@JoinColumn(name="外键的字段名")
1.一对一和多对一的@JoinColumn注解的都是在“主控方”,都是本表指向外表的外键名称。
2.一对多的@JoinColumn注解在“被控方”,即一的一方,指的是外表中指向本表的外键名称。
3.多对多中,joinColumns写的都是本表在中间表的外键名称,
inverseJoinColumns写的是另一个表在中间表的外键名称。
mappedBy跟JoinColumn/JoinTable总是处于互斥的一方
如产品类型和产品的关系:
@Entity
@Table(name="tb_productType")//经常给漏掉这东西
public class ProductType extends BaseBean
{
private static final long serialVersionUID = 3466104768256418884L;
@Column(nullable=false,unique=true)
private String name;
@OneToMany(mappedBy="type",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private List<Product> products;
...
和:
@Entity
@Table(name="tb_product")
public class Product extends BaseBean
{
private static final long serialVersionUID = 4109238647414563541L;
@Column(nullable=false)
private String name;
@Column(precision=2)
private double price;
@Basic(fetch = FetchType.LAZY)
@Column(columnDefinition = "longtext")
private String intro;
private String masterDrowing;
@ManyToOne
@JoinColumn(name="productType_id")
private ProductType type;
private String comment;
private int hit;
private boolean finalRealse;
private int count;
@ManyToOne
@JoinColumn(name="person_id")
private Person contacter;
@Temporal(value = TemporalType.DATE)
private Date realseDate;
...
hibernate的配置文件:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/site?characterEncoding=UTF-8
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<!-- 要加这一句 否则可能会遇到异常 -->
<property name="current_session_context_class">thread</property>
<mapping class="com.fdauto.bean.Product" />
<mapping class="com.fdauto.bean.ProductType" />
</session-factory>
</hibernate-configuration>
产生数据库表的类:
createTable类
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class CreateTable {
static void create(){
SchemaExport export = new SchemaExport(new AnnotationConfiguration().configure());
export.create(true, true);
}
public static void main(String[] args){
create();
}
}
经过这些配置就可以生成数据库表了!!
报 javax.persistence.OneToMany.orphanRemoval()Z异常的解决方法:去掉myeclipse中的j2ee包居然就可以了!!
@oneToMany(mappedBy="另一方类中对应的属性名(外键)",cascade=CascadeType.ALL,fetch=FetchType.EAGER)就相当于xml配置中的inverse=true
在单向关系中没有mappedBy。
mappedBy一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
主控方相当于拥有指向另一方的外键的一方。
mappedBy指定的是不需要维护关系的一端
@ManyToOne
@JoinColumn(name="外键的字段名")
1.一对一和多对一的@JoinColumn注解的都是在“主控方”,都是本表指向外表的外键名称。
2.一对多的@JoinColumn注解在“被控方”,即一的一方,指的是外表中指向本表的外键名称。
3.多对多中,joinColumns写的都是本表在中间表的外键名称,
inverseJoinColumns写的是另一个表在中间表的外键名称。
mappedBy跟JoinColumn/JoinTable总是处于互斥的一方
如产品类型和产品的关系:
@Entity
@Table(name="tb_productType")//经常给漏掉这东西
public class ProductType extends BaseBean
{
private static final long serialVersionUID = 3466104768256418884L;
@Column(nullable=false,unique=true)
private String name;
@OneToMany(mappedBy="type",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private List<Product> products;
...
和:
@Entity
@Table(name="tb_product")
public class Product extends BaseBean
{
private static final long serialVersionUID = 4109238647414563541L;
@Column(nullable=false)
private String name;
@Column(precision=2)
private double price;
@Basic(fetch = FetchType.LAZY)
@Column(columnDefinition = "longtext")
private String intro;
private String masterDrowing;
@ManyToOne
@JoinColumn(name="productType_id")
private ProductType type;
private String comment;
private int hit;
private boolean finalRealse;
private int count;
@ManyToOne
@JoinColumn(name="person_id")
private Person contacter;
@Temporal(value = TemporalType.DATE)
private Date realseDate;
...
hibernate的配置文件:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/site?characterEncoding=UTF-8
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<!-- 要加这一句 否则可能会遇到异常 -->
<property name="current_session_context_class">thread</property>
<mapping class="com.fdauto.bean.Product" />
<mapping class="com.fdauto.bean.ProductType" />
</session-factory>
</hibernate-configuration>
产生数据库表的类:
createTable类
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class CreateTable {
static void create(){
SchemaExport export = new SchemaExport(new AnnotationConfiguration().configure());
export.create(true, true);
}
public static void main(String[] args){
create();
}
}
经过这些配置就可以生成数据库表了!!
相关文章推荐
- Hibernate 自动生成映射文件 || 根据pojo类生成数据库表
- myeclipse的hibernate自动生成的DAO不写数据库的解决办法
- Hibernate自动生成数据库表
- 【通过Hibernate反向生成对应的数据库表单】
- hibernate 自动生成数据库表
- Eclipse(LUNA4.4.2)配置hibernate(4.3.8)连接数据库并自动生成代码
- 关于Hibernate不能自动生成数据库表-POJO和映射文件正确但是访问对应表出错-的原因
- 【Hibernate】——SchemaExport自动生成数据库表
- Hibernate自动生成数据库表
- Hibernate中利用配置文件(hbm)自动生成数据库表
- Hibernate 系统自动生成数据库表的两种方法
- spring+hibernate自动生成数据库表结构
- 使用hibernate自动生成数据库表
- 通过Hibernate反向生成对应的数据库表单
- spring和hibernate整合时设置自动生成数据库的表
- 通过Hibernate将数据库在myeclipse中逆向生成
- 通过数据库自动反向生成MyBatis文件
- Hibernate中自动生成数据库表的两种方式
- hibernate笔记--通过SchemaExport生成数据库表
- 在MyEclipse的web项目/java项目中,使用Hibernate-tools中的hbm2java和hbm2ddl工具,根据hbm文件自动生成pojo和数据库脚本