我使用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;
}