2016-08-23 1 views
0

Я использую Spring-boot и Oracle, и я хочу вставить в свою новую таблицу записей базы данных, используя метод NamedParameterJdbcTemplateinsertbatch.using spring NamedParameterJdbcTemplate метод insertbatch, вставить объект, который имеет внутренний объект

но мой object(ProductMarket) имеют внутреннюю object(Market) со значением мне нужно (getMarket(). GetId())

, как я могу сказать SqlParameterSource взять идентификатор рынка от внутреннего Object?

package x.dao.productMarket; 

import java.util.List; 

import x.model.base.ProductMarket; 

public interface IProductMarketDao { 

    public static final String INSERT_PRODUCT_MARKETS = 
     " INSERT " + 
     " INTO PRODUCT_MARKETS" + 
     " (" + 
     " product_id ," + 
     " market_id" + 
     ")" + 
     " VALUES" + 
     " (" + 
     " :productId ," + 
     " :marketId " + 
     ") "; 


    void insert(List <ProductMarket> productMarkets); 

} 



package x.dao.productMarket; 

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; 
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; 
import org.springframework.jdbc.core.namedparam.SqlParameterSource; 
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils; 
import org.springframework.stereotype.Repository; 

import x.model.base.ProductMarket; 

@ 
Repository 
public class ProductMarketDao implements IProductMarketDao { 

    @ 
    Autowired 
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 


    @ 
    Override 
    public void insert(List <ProductMarket> productMarkets) { 
     SqlParameterSource[] batch = 
      SqlParameterSourceUtils.createBatch(productMarkets.toArray()); 
     namedParameterJdbcTemplate.batchUpdate(INSERT_PRODUCT_MARKETS, 
      batch); 
    } 
} 

package x.model.base; 

public class ProductMarket implements Serializable { 

    private static final long serialVersionUID = 421870753189756693 L; 

    private long productId; 
    private Market market; 

    /** 
    * @return the productId 
    */ 
    public long getProductId() { 
      return productId; 
     } 
     /** 
     * @param productId the productId to set 
     */ 
    public void setProductId(long productId) { 
     this.productId = productId; 
    } 


    public Market getMarket() { 
     return market; 
    } 
    public void setMarket(Market market) { 
     this.market = market; 
    } 

} 
+0

Вы используете пружинный ботинок? – lolo

+0

@lolo Да, я использую весеннюю обувь –

ответ

0

Предположив, что определение рынка выглядит следующим образом:

class Market { 
    private final int id; 
    private final String name; 

    public Market(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

Затем вы можете изменить шаблон SQL следующим образом:

static final String INSERT_PRODUCT_MARKETS = 
     " INSERT " + 
       " INTO product_markets" + 
       " (" + 
       " product_id ," + 
       " market_id" + 
       ")" + 
       " VALUES" + 
       " (" + 
       " :productId ," + 
       " :market.id " + 
       ") "; 

Обратите внимание, как я использую путь для представления именованный параметр в форме :market.id, где market - это поле в ProductMarket и id - это имя поля в Market.

После определения таким образом NamedParameterJdbcTemplate сможет разыменовать соответствующее значение и использовать его в качестве аргумента для запроса.

Смежные вопросы