2013-03-18 5 views
3

관계 테이블 Stock Category에 행을 삽입하려고합니다.어떻게 최대 절전 모드 방법을 사용하여 행을 삽입 할 수 있습니까?

나는이 예제를 따르고있다.

http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column- 주석/

는 지금은 이미 테이블 stock 및 카테고리에 데이터가.

이제는 주식과 카테고리를 서로 연관시키고 싶습니다. 어떻게 사용자 정의 SQL 쿼리를 작성하지 않고도이 작업을 수행 할 수 있습니다.

이렇게 StockCategory를 추가 할 수 있습니까?

Stock stock = new Stock(); 
stock.setStockId(1); 
Category category = new Category(); 
category.setCategoryId(1); 
StockCategory stockCategory = new StockCategory(); 

stockCategory.setStock(stock); //here you need to get the stock object by id 
stockCategory.setCategory(category1); //here you need to get the category1 object by id 
stockCategory.setCreatedDate(new Date()); //extra column 
stockCategory.setCreatedBy("system"); //extra column 
session.save(stockCategory); 

미리 감사드립니다.

+4

튜토리얼에서 설명하지 않았습니까? –

+0

기다려. – PSR

+0

nullable = false와 같은 일부 필드가 있는지 확인하고 있습니다. – PSR

답변

5
StockCategory stockCategory = new StockCategory(); 

stockCategory.setStock(stock); //here you need to get the stock object by id 
stockCategory.setCategory(category1); //here you need to get the category1 object by id 
stockCategory.setCreatedDate(new Date()); //extra column 
stockCategory.setCreatedBy("system"); //extra column 
session.save(stock); 

이 제품은 또한이

+0

값을 설정해야합니다. 다른 주식 필드 및 카테고리가 null 인 경우. 아직도 작동할까요? – Thinker

+0

필드가 null이 아니면 예외가 발생합니다. nullable은 문제가없는 경우 예외입니다. – PSR

+0

@Thinker 예에서 nullable = false로 지정되지 않았습니다. 기본값으로 nullable입니다. 따라서 아무런 문제가 없습니다. – PSR

1

최대 절전지도 자바와 같은 ORM은 데이터 소스에 객체와이 데이터의 모델을 생성 한 후 생성하고 개체를 업데이트하고 모델을 업데이트하기 위해 저장 서브 루틴을 호출합니다. Insert/Update/Delete SQL 명령은 ORM 라이브러리에 의해 수행됩니다.

따라서 새 개체를 만드는 예제에서는 session.save(stock)이 호출 될 때까지 데이터 소스가 업데이트되지 않습니다.

session.beginTransaction(); 

    Stock stock = new Stock(); 
    stock.setStockCode("7052"); 
    stock.setStockName("PADINI"); 

    //assume category id is 7 
    Category category1 = (Category)session.get(Category.class, 7); 

    StockCategory stockCategory = new StockCategory(); 
    stockCategory.setStock(stock); 
    stockCategory.setCategory(category1); 
    stockCategory.setCreatedDate(new Date()); //extra column 
    stockCategory.setCreatedBy("system"); //extra column 

    stock.getStockCategories().add(stockCategory); 

    session.save(stock); 

    session.getTransaction().commit(); 
0

적절한 관계를 정의하면 코드가 작동합니다. 예를 들어 StockCategory.java가 다음과 같이 보이는 경우 현재 수행중인 작업이 작동합니다.

Class StockCategory{ 

    @ManyToOne(...) 
    private Stock stock; 

    @ManyToOne(...) 
    private Category category; 
} 

그러면 다음 코드가 작동합니다. Stock 및 Category의 다른 필드를 채울 필요가 없습니다.

Stock stock = new Stock(); 
    stock.setStockId(1); 
    Category category = new Category(); 
    category.setCategoryId(1); 
    StockCategory stockCategory = new StockCategory(); 

    stockCategory.setStock(stock); 
    stockCategory.setCategory(category1); 
    stockCategory.setCreatedDate(new Date()); //extra column 
    stockCategory.setCreatedBy("system"); //extra column 
    session.save(stockCategory);