JPA锁定@ManyToOne

时间:2015-02-26 11:39:41

标签: spring jpa c3p0

我使用spring服务和JPA与ComboPooledDataSource(c3p0数据源)进行持久化。我有这个实体:

@Entity
@Table(name="C_PLANTILLAESCANDALLO")
public class CPlantillaescandallo implements Serializable,Cloneable {
    private static final long serialVersionUID = 1L;

@Id
@Column(name="intidplantilla")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQ_PLANTILLAEXTORNO")
@SequenceGenerator(name="SEQ_PLANTILLAEXTORNO",sequenceName="SEQ_PLANTILLAEXTORNO") 
private Long idplantilla;

@Column(name="intidarticulo")
private Long idarticulo;

@ManyToOne
@JoinColumns({
    @JoinColumn(name="INTIDARTICULO", referencedColumnName="INTIDARTICULO",insertable=false,updatable=false),
    @JoinColumn(name="INTIDFAMILIA", referencedColumnName="INTIDFAMILIA",insertable=false,updatable=false)
    })
private Articulos articulo;

我不知道为什么,如果我对CPlantillaescandallo进行了更新,那么" Articulos"锁定直到我完成交易(这是一个60秒或更长的漫长过程)。

为什么" Articulos"已锁定如果我没有对此表格进行任何操作?

这是我的TransactionManagement中的代码:

@EnableTransactionManagement
public class PresistenciaOracleJPAConfig {

    private static Logger logger = LoggerFactory.getLogger(PresistenciaOracleJPAConfig.class);

    @Autowired  private Environment env;

    @Bean
    public DinamicoDataSource dataSource() throws PropertyVetoException{
        DinamicoDataSource valdev=new DinamicoDataSource();
        Map<Object,Object> mapaDataSource=new HashMap<Object,Object>();
        //mapaDataSource.put("00",dataSourceMultiempresa());
        mapaDataSource.put("01",dataSourceViesa());
        mapaDataSource.put("05", dataSourceAlimentacion());
        valdev.setTargetDataSources(mapaDataSource);
        valdev.setDefaultTargetDataSource(dataSourceMultiempresa());
        valdev.setClavePorDefecto("01");
        return valdev;
    }

    /**
     * Configuramos un dataSource, para que conecte con viesa.
     * @return
     * @throws PropertyVetoException 
     */
    @Bean(name="Multiempresa")
    public DataSource dataSourceMultiempresa() throws PropertyVetoException{
        return crearDataSourceEsquema("empresa");
    }

    /**
     * Configuramos un dataSource, para que conecte con viesa.
     * @return
     * @throws PropertyVetoException 
     */
    @Bean(name="Viesa")
    public DataSource dataSourceViesa() throws PropertyVetoException{
        return crearDataSourceEsquema("empresa1");
    }

    private DataSource crearDataSourceEsquema(String usuario)
            throws PropertyVetoException {
        String entorno = obtenerEntornoActivo();
        ComboPooledDataSource dataSource=new ComboPooledDataSource();
        dataSource.setDriverClass(obtenerPropiedad(entorno, "jdbc.driverclass"));
        dataSource.setJdbcUrl(obtenerPropiedad(entorno, "jdbc.url"));
        dataSource.setUser(obtenerPropiedad(entorno, "jdbc."+usuario+".user"));
        dataSource.setPassword(obtenerPropiedad(entorno, "jdbc."+usuario+".password"));
        // Configuracion del pool de conexiones
        dataSource.setMinPoolSize(convertirAEntero(obtenerPropiedad(entorno, "pool.minpoolsice")));                                     
        dataSource.setAcquireIncrement(convertirAEntero(obtenerPropiedad(entorno, "pool.acquireincrement")));
        dataSource.setMaxPoolSize(convertirAEntero(obtenerPropiedad(entorno, "pool.maxpoolsize")));
        return dataSource;
    }

0 个答案:

没有答案