您的位置:首页 > 数据库

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();

}

}

经过这些配置就可以生成数据库表了!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: