Hiberante+Mysql+Maven 2 XMLプロファイル

9073 ワード

詳細
Maven 3+Hibernate 3.1+Mysqlを用いて簡単なモデルを実現
使用するツール:   Eclipse 4.3    Maven 3.1    Hibernate 3.1rc2    MySQL 5.0
具体的な構築実現手順:
  1.Davidとしてデータベースを作成します.
  2.Davidデータベースにテーブルを作成する

DROP TABLE IF EXISTS `stock`;
CREATE TABLE `stock` (
  `STOCK_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `STOCK_CODE` VARCHAR(10) NOT NULL,
  `STOCK_NAME` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`STOCK_ID`) USING BTREE,
  UNIQUE KEY `UNI_STOCK_NAME` (`STOCK_NAME`),
  UNIQUE KEY `UNI_STOCK_ID` (`STOCK_CODE`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  3.EclipseでMaven Projectを作成する
  4.POM.xmlの作成


  4.0.0

  com.david.common
  SpringExample
  0.0.1-SNAPSHOT
  jar

  SpringExample
  http://maven.apache.org

  
    UTF-8
  

  
    
      junit
      junit
      3.8.1
      test
    

    hibernate
    hibernate
    3.1rc2

	
		mysql
		mysql-connector-java
		5.1.9
	
	
	
	
		dom4j
		dom4j
		1.6.1
	
 
	
		commons-logging
		commons-logging
		1.1.1
	
 
	
		commons-collections
		commons-collections
		3.2.1
	
 
	
		cglib
		cglib
		2.2
	
	
 
	
		javax.transaction
		jta
		1.1
	
	
    com.jolira
    asm
    3.3.0

  


5.
Stock.hbm.xmlを構成するこのファイルはsrc/main/resources/com/david/common/stock.hbm.xmlに置く

 

 

    
        
            
            
        
        
            
        
        
            
        
    


6.Stockエンティティークラスの作成

public class Stock implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private Integer stockId;
	private String stockCode;
	private String stockName;
	
	public Stock () {
		
	}
	
	public Stock(String stockCode, String  stockName){
		this.stockCode = stockCode;
		this.stockName = stockName;
	}

	public Integer getStockId() {
		return stockId;
	}

	public void setStockId(Integer stockId) {
		this.stockId = stockId;
	}

	public String getStockCode() {
		return stockCode;
	}

	public void setStockCode(String stockCode) {
		this.stockCode = stockCode;
	}

	public String getStockName() {
		return stockName;
	}

	public void setStockName(String stockName) {
		this.stockName = stockName;
	}

	public String toString(){
		return "[ stockId:"+stockId
				+" stockName:"+stockName+" stockCode:"+stockCode+"]";
	}
}


7.簡単なHibernateツールクラスを作成します.セッションなどの操作を取得するために使用

public class HibernateUtil {
	
	private static final SessionFactory sessionFactory = buildSessionFactory();
	
    public static SessionFactory buildSessionFactory(){
    	try {
			 return new Configuration().configure().buildSessionFactory();
		} catch (Exception ex) {
			
			System.err.println("Initial SessionFactory creation fails"+ex);
			throw new ExceptionInInitializerError(ex);
	   }
    }
    
    public static SessionFactory getSessionFactory(){
    	return sessionFactory;
    }
    
    public static void shutdown(){
    	getSessionFactory().close();
    }
}

8.
最後にHibernate.cfg.xmlを作成/src/main/resources/hibernate.cfg.xmlに配置




    
        false
        com.mysql.jdbc.Driver
        jdbc:mysql://localhost:3306/david
        root
        123456
        org.hibernate.dialect.MySQLDialect
        true
        
        
        
    


9.構成に問題があるかどうかを確認するために、テストクラスを書きます.

public class App 
{
    public static void main( String[] args )
    {
       System.out.println("Maven +hibernate + Mysql");
       
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        Stock stock = new Stock();
        
        stock.setStockCode("47135");
        stock.setStockName("GENM");
        session.save(stock);
        session.getTransaction().commit();
        
    }
}

10.運転中にエラーが検出されました.エラーメッセージは次のとおりです.

Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(I)V
	at net.sf.cglib.core.DebuggingClassWriter.(DebuggingClassWriter.java:47)
	at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)
	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)
	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
	at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:362)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1145)
	at com.david.utils.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
	at com.david.utils.HibernateUtil.(HibernateUtil.java:12)
	at com.david.common.App.main(App.java:17)

11.この問題を解決する:元はパケットの競合(asmが3.3バージョンを導入していない場合、mavenの依存伝達は自動的に1.5.3バージョンのasmjarパケットを導入するため、このパケットはcglib 2.2バージョンのパケットと競合する.そのため、表示する高バージョンのasmパケットを導入する)
pom.xmlに追加を表示

	
    com.jolira
    asm
    3.3.0


12.再稼働すれば問題ありません.