ANtでPOJOを実行して自動的にマップファイルとデータテーブルを生成します.
ヒベルナでクラスをマッピングする際の問題点について:
1.まずデータテーブルを作成してから、JOPO類とマッピングファイルを書きます.
2.まずPOJO類を書いてファイルをマッピングし、最後のデータベース
3.まずファイルをマッピングし、POJOとデータベースを同時に生成する
第1の方法は、背面方向の対象原理があり、制御するのに不便なので、おすすめできません.第2の考え方は分かりやすいと思いますが、一般の人の考え方に合っていますが、POJO類に大量のXdocletコメントを追加しなければなりません.3番目は便利です.みんなに勧められていますが、写像に慣れていない人にはちょっと面倒です.しかし、後の2つはツールに属していますので、データテーブル間の関係を精密に制御する必要があります.データベースの生成後、適切に修正するべきです.(この問題については、仁者は仁義を見、知者は知恵を見ます.経験があれば、話してみてください.)
今は自分の実践を結び付けて、第二種類の紹介をします.問題があれば、名前を教えてください.
プロジェクトをmyeclipse webプロジェクトと仮定する.今はPOJOが編集されています.Xdocletのコメントは正しく作成されています.次のクラスの例subCategory=new HashSetこれは一対の多さのようにマッピングできるかどうか、弟はまだ実験を行っていません.
今はツールを使って自動的にhbmを生成し、データテーブルを作成します.次のようにant buildファイルをプロジェクトのルートディレクトリに置きます.注意する必要があります.プロジェクト用のjarカバンをWebRoot/WEB-INF/lib/ディレクトリに置く必要があります.(ここでは間違いを防ぐために、全体をこのカタログの下に置いておきます.)hibernate 3、xdoclet、hiberga-tools.jar、sf 4 j
1.まずデータテーブルを作成してから、JOPO類とマッピングファイルを書きます.
2.まずPOJO類を書いてファイルをマッピングし、最後のデータベース
3.まずファイルをマッピングし、POJOとデータベースを同時に生成する
第1の方法は、背面方向の対象原理があり、制御するのに不便なので、おすすめできません.第2の考え方は分かりやすいと思いますが、一般の人の考え方に合っていますが、POJO類に大量のXdocletコメントを追加しなければなりません.3番目は便利です.みんなに勧められていますが、写像に慣れていない人にはちょっと面倒です.しかし、後の2つはツールに属していますので、データテーブル間の関係を精密に制御する必要があります.データベースの生成後、適切に修正するべきです.(この問題については、仁者は仁義を見、知者は知恵を見ます.経験があれば、話してみてください.)
今は自分の実践を結び付けて、第二種類の紹介をします.問題があれば、名前を教えてください.
プロジェクトをmyeclipse webプロジェクトと仮定する.今はPOJOが編集されています.Xdocletのコメントは正しく作成されています.次のクラスの例
package org.easyshop.domain;
import java.util.HashSet;
import java.util.Set;
/**
*
* @hibernate.class
*
*/
public class Category {
private Long categoryId;
private String categoryName;
private String imageURL;
private Set<Category> subCategory=new HashSet<Category>();
private Set<Item> items=new HashSet<Item>();
/**
* @hibernate.id
* column="categoryId"
* unsaved-value="null"
* generator-class="native"
*
*/
public Long getCategoryId()
{
return categoryId;
}
public void setCategoryId(Long categoryId)
{
this.categoryId = categoryId;
}
/**
*
* @hibernate.property length="32" not-null="true"
*
*/
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String name) {
this.categoryName = name;
}
/**
*
* @hibernate.property length="64"
*
*/
public String getImageURL() {
return imageURL;
}
public void setImageURL(String imageURL) {
this.imageURL = imageURL;
}
/**
*
* @hibernate.set cascade="all"
* @hibernate.key column="categoryId"
* @hibernate.one-to-many class="org.easyshop.domain.Cagegory"
*
*/
public Set<Category> getSubCategory() {
return subCategory;
}
public void setSubCategory(Set<Category> sub) {
this.subCategory = sub;
}
/**
*
* @hibernate.set table="category_item" cascade="save-update" lazy="true"
* @hibernate.key column="categoryId"
* @hibernate.many-to-many class="org.easyshop.domain.Item" column="itemId"
*
*/
public Set<Item> getItems() {
return items;
}
public void setItems(Set<Item> items) {
this.items = items;
}
}
ps:ここに問題があります.教えてください.ヒベルナの返身関連問題.上記のprvate Set今はツールを使って自動的にhbmを生成し、データテーブルを作成します.次のようにant buildファイルをプロジェクトのルートディレクトリに置きます.注意する必要があります.プロジェクト用のjarカバンをWebRoot/WEB-INF/lib/ディレクトリに置く必要があります.(ここでは間違いを防ぐために、全体をこのカタログの下に置いておきます.)hibernate 3、xdoclet、hiberga-tools.jar、sf 4 j
<?xml version="1.0" encoding="gbk"?>
<project name="newshop" default="schema" basedir=".">
<property name="project.src" value="src"/>
<property name="po.package" value="org/easyshop/domain"/>
<property name="xdoclet.lib" value="WebRoot/WEB-INF/lib/xdoclet"/>
<property name="project.lib" value="WebRoot/WEB-INF/lib"/>
<property name="class.dir" value="WebRoot/WEB-INF/classes"/>
<!--Xdoclet -->
<path id="xdoclet.task.classpath">
<fileset dir="${xdoclet.lib}">
<include name="*.jar" />
</fileset>
<pathelement location="${xdoclet.lib}/xdoclet-plugin-hibernate-1.0.4.jar" />
</path>
<!--Hibernate -->
<path id="project.classpath">
<fileset dir="${project.lib}">
<include name="**/*.jar" />
</fileset>
<pathelement path="${class.dir}"/><!-- -->
</path>
<!-- *.hbm.xml -->
<target name="removehbm" >
<delete>
<fileset dir="${basedir}/src">
<include name="**/*.hbm.xml"/>
</fileset>
</delete>
</target>
<target name="removeclass" >
<delete>
<fileset dir="${basedir}/${class.dir}">
<include name="**/*.class"/>
</fileset>
</delete>
</target>
<!-- class , -->
<target name="compile" depends="removeclass">
<javac srcdir="${project.src}"
destdir="${class.dir}"
debug="on"
optimize="off"
deprecation="on">
<classpath refid="project.classpath"/>
</javac>
</target>
<!-- 1:POJO-> 2: -> -->
<taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="xdoclet.task.classpath" />
<taskdef name="schemaexport" classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="project.classpath" /><!-- Hibernate Hbm2ddl hibernate-tool -->
<!--POJO-> -->
<target name="hibernate.mapping.generate" depends="removehbm,compile">
<xdoclet>
<fileset dir="${project.src}">
<include name="${po.package}/*.java" />
</fileset>
<component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" destdir="${basedir}/${project.src}" version="3.0" />
</xdoclet>
</target>
<!-- -> -->
<target name = "schema" depends="hibernate.mapping.generate">
<schemaexport destdir = "${project.src}">
<configuration configurationfile = "${project.src}/hibernate.cfg.xml" />
<hbm2ddl export="true" console="true" create="true" update="true" drop="false" outputfilename="order.sql" />
</schemaexport>
</target>
</project>
上のANtコンパイルの流れは、POJO.classファイルとマッピングhbmファイルを削除し、POJOとhbmファイルを再コンパイルし、xdocletツールから対応hbmマッピングファイルを生成し、最後にhibernate-toolsツールのHbm 2 ddl類からデータテーブルを生成することです.