读书人

HIbernate-tools批改记录

发布时间: 2012-12-28 10:29:05 作者: rapoo

HIbernate-tools修改记录
HIbernate-tools修改记录
1,增加中文注释,参考BLOG:http://www.blogjava.net/pauliz/archive/2009/11/13/302162.html
2,修改默认ID生成规则

public String getTableIdentifierStrategyName(TableIdentifier identifier) {//return "assigned";return "uuid";//默认UUID}


3,增加ONE-TO-MANY的集合注解的targetEntity属性,也可以增加其他属性
public String generateCollectionAnnotation(Property property, Configuration cfg) {StringBuffer annotation = new StringBuffer();Value value = property.getValue();if ( value != null && value instanceof Collection) {Collection collection = (Collection) value;if ( collection.isOneToMany() ) {String mappedBy = null;OneToMany oneToMany = (OneToMany) collection.getElement();annotation.append("    @").append( importType( "javax.persistence.OneToMany") ).append( "(cascade={").append(getCascadeType( property ) ).append("}")//melon add FIXME 增加targetEntity属性//.append(",targetEntity=").append(getTargetClassName(property)).append(".class").append(",targetEntity=").append(oneToMany.getReferencedEntityName()).append(".class").append(", fetch=").append( getFetchType( property ) );if ( collection.isInverse() ) {annotation.append(", mappedBy=\"");mappedBy = getOneToManyMappedBy( cfg, collection );annotation.append( mappedBy ).append("\"");}annotation.append(")");if (mappedBy == null) annotation.append("\n").append( generateJoinColumnsAnnotation(property) );}else {//TODO do the @OneToMany @JoinTable//TODO composite elementString mappedBy = null;annotation.append("    @").append( importType( "javax.persistence.ManyToMany") ).append( "(cascade={").append(getCascadeType( property ) ).append("}").append(", fetch=").append( getFetchType( property ) );if ( collection.isInverse() ) {annotation.append(", mappedBy=\"");mappedBy = getManyToManyMappedBy( cfg, collection );annotation.append( mappedBy ).append("\"");}annotation.append(")");if (mappedBy == null) {annotation.append("\n    @");annotation.append( importType( "javax.persistence.JoinTable") ).append( "(name=\"" );Table table = collection.getCollectionTable();annotation.append( table.getName() );annotation.append( "\"" );if ( StringHelper.isNotEmpty( table.getSchema() ) ) {annotation.append(", schema=\"").append( table.getSchema() ).append("\"");}if ( StringHelper.isNotEmpty( table.getCatalog() ) ) {annotation.append(", catalog=\"").append( table.getCatalog() ).append("\"");}String uniqueConstraint = generateAnnTableUniqueConstraint(table);if ( uniqueConstraint.length() > 0 ) {annotation.append(", uniqueConstraints={").append(uniqueConstraint).append("}");}annotation.append( ", joinColumns = { ");buildArrayOfJoinColumnAnnotation(collection.getKey().getColumnIterator(),annotation,property.isInsertable(),property.isUpdateable());annotation.append( " }");annotation.append( ", inverseJoinColumns = { ");buildArrayOfJoinColumnAnnotation(collection.getElement().getColumnIterator(),annotation,property.isInsertable(),property.isUpdateable());annotation.append( " }");annotation.append(")");}}String hibernateCascade = getHibernateCascadeTypeAnnotation( property );if (hibernateCascade.length() > 0) annotation.append("\n    ").append(hibernateCascade);}return annotation.toString();}


4,通过hibernate.cfg.xml配置自动生成带注解的JAVA domain文件

import java.io.File;import java.util.Properties;import junit.framework.TestCase;import org.hibernate.cfg.Configuration;import org.hibernate.cfg.JDBCMetaDataConfiguration;import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;import org.hibernate.cfg.reveng.ReverseEngineeringSettings;import org.hibernate.tool.hbm2x.POJOExporter;public class GeneratePojoTest extends TestCase {public void testGenerateJava() {Configuration xmlcfg = new Configuration().configure("/hibernate.cfg.xml");JDBCMetaDataConfiguration cfg = new JDBCMetaDataConfiguration();Properties properties = xmlcfg.getProperties();cfg.setProperties(properties);DefaultReverseEngineeringStrategy configurableNamingStrategy = new DefaultReverseEngineeringStrategy();configurableNamingStrategy.setSettings(new ReverseEngineeringSettings().setDefaultPackageName("net.esj.test.generic")//要生成的包名.setCreateCollectionForForeignKey(true)//是否生成many-to-one的在one端的集合类.setCreateManyToOneForForeignKey(true)//是否生成many-to-one.setDetectManyToMany(true)//是否生成many-to-many.setDetectOptimisticLock(true) //乐观锁对象?);cfg.setReverseEngineeringStrategy(configurableNamingStrategy);cfg.readFromJDBC();cfg.buildMappings();POJOExporter exporter = new POJOExporter(cfg,getOutputDir());exporter.getProperties().setProperty("ejb3", "true");//ejb3注解exporter.getProperties().setProperty("jdk5", "true");//jdk5语法(主要是集合类的泛型处理)exporter.start();//exporter = new POJOExporter(xmlcfg,getOutputDir());//exporter.start();//TestHelper.deleteDir(getOutputDir());}private File getOutputDir(){File file = new File("E:\\program\\javaws\\melon_2.0\\src\\core\\main\\test");//生成项目的物理位置(跟目录,tools会自动根据pacakge建立相应路径)return file;}}


直接用junit或mian函数运行,而非依赖于jboss的插件,省的更新eclipse或者迁移的时候各种麻烦
副项目包备份

读书人网 >编程

热点推荐