我正在使用JPA/HIBERNATE來管理我的mysql數據庫(請參閱&寫),同一個數據庫被其他應用程序使用(只讀)。 我想要做的是:雖然我編輯我的數據庫在Java(休眠)我希望所有其他應用程序可以讀取舊值,當我的程序完成時,我想切換到程序修改的新值。如何通過Hibernate在java中使用它時鎖定對數據庫的訪問?
我該怎麼做?
下面是代碼
public static Integer (Equipment equipment)
{
Session session = factory.openSession();
Transaction tx = null;
Integer equipementID = null;
try{
tx = session.beginTransaction();
equipementID = (Integer) session.save(equipment);
tx.commit();
}catch (ConstraintViolationException e) {
if (tx!=null) tx.rollback();
}finally {
}
return equipementID;
}
public static void parseFile (String filePath1) throws IOException
{
Scanner s1 = new Scanner(new File(filePath1));
s1.useDelimiter("\\s*fish\\s*");
while (s1.hasNextLine())
{
Scanner s2 = new Scanner (s1.nextLine());
s2.useDelimiter(";");
while (s2.hasNext()) {
String hostName = s2.next();
int asNum=s2.nextInt();
String type=s2.next();
String addrIp=s2.next();
String vendor=s2.next();
String model=s2.next();
String version=s2.next();
String function=s2.next();
String usage=s2.next();
if (asNum==3215)
addEquipmentToDatabase(new Equipment(hostName,0,addrIp,"ftipnn",asNum,model,type,vendor,function,usage,version,1,0));
else
updateEquipment(equipment,new Equipment(hostName,0,addrIp,"domain",asNum,model,type,vendor,function,usage,version,1,0));
}
}
s2.close();
}
s1.close();
}
public static void updateEquipment (Equipment actualEquipment,Equipment newEquipment)
{
Transaction tx = session.beginTransaction();
Query query = session.createSQLQuery("UPDATE equipment SET hostName = '"+newEquipment.getHostName()+"',"
+"parity= '"+newEquipment.getParity()+"',"
+"addrIP= '"+newEquipment.getAddrIP()+"',"
+"domainExtension= '"+newEquipment.getDomainExtension()+"',"
+"asNum= '"+newEquipment.getAsNum()+"',"
+"model= '"+newEquipment.getModel()+"',"
+"type= '"+newEquipment.getType()+"',"
+"vendor ='"+newEquipment.getVendor()+"',"
+"function= '"+newEquipment.getFunction()+"',"
+"utilization= '"+newEquipment.getUtilization()+"',"
+"version= '"+newEquipment.getVersion()+"',"
+"idSite= '"+newEquipment.getIdSite()+"',"
+"idProfile= '"+newEquipment.getIdProfile()+"' "+
"WHERE hostName LIKE '"+actualEquipment.getHostName()+"'") ;
query.executeUpdate();
tx.commit();
}
請分享您迄今使用過的任何代碼。看到這裏:http://stackoverflow.com/help/mcve – AGE
我加入了一個操縱數據庫的代碼的例子。 – Marouane