ANtでPOJOを実行して自動的にマップファイルとデータテーブルを生成します.


ヒベルナでクラスをマッピングする際の問題点について:
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 SetsubCategory=new HashSetこれは一対の多さのようにマッピングできるかどうか、弟はまだ実験を行っていません.
 
今はツールを使って自動的に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類からデータテーブルを生成することです.