标签归档:hibernate

长期招聘Java/PHP/WebDev工程师

到处打广告,长期招聘Java/PHP/WebDev民工

我们的网站:http://www.lehecai.com

应聘请投递简历到:sunshow@gmail.com,注明应聘职位

我们的要求(部分满足即可):

Java

  • 熟悉Struts2 + Spring + Hibernate
  • 熟悉数据抓取
  • 了解或熟悉多线程的工作方式
  • 有数据分析相关经验,有jfreechart等图表经验尤佳

PHP

  • 熟悉MVC
  • 熟悉MemCached
  • 熟悉smarty等模板技术

WebDev

  • 熟练使用jQuery
  • 精通CSS和基于XHTML+CSS的布局方式

[Spring+Hibernate]小心处理脏数据的自动更新

有并发请求的时候会存在这种隐患
例如请求A和B都是同一个Action的实例,并取了同样的数据做处理
A–>取数据–>调用set方法设置A相关的数据–>(B处理数据的时间点)–>页面展现
B–>取数据–>调用set方法设置B相关的数据–>页面展现

也就是说在A设置完数据到页面展现的中间这个时间段里B又把同样的数据设置成了其他的值
这时候Spring的事务管理就会检测数据的一致性,如果发现有不一致的就做自动更新

解决方法有几种:
1、Action里不对数据进行处理
比如我碰到的情况时间原因就把不同的处理放到JS去处理了
2、自己管理事务,不使用Spring的事务管理
3、实现数据对象的Clone方法,页面展现使用的数据都通过Clone脱离和Spring管理的数据库session的关系

由于我没有对Spring和Hibernate做过深入研究,以上分析仅为猜测,谢绝拍砖
不过这个问题确实是存在的,解决方法也是有效的,也从另一个角度说明要想驾驭框架就得掌握其处理机制

了解UUID

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。UUID按照开放软件基金会 (OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID (Globals Unique Identifiers)。

UUID 在所有计算机上都是唯一的。不过,它们的值是完全随机的,因此不能用来确定添加值的时间或值的顺序。另外,UUID 值比其它方法(包括全局自动增量)所需的值大得多,并且在主键表和外键表中都需要更多的表空间。使用 UUID 建立表索引的效率也更低。

标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

JDK中的UUID实现

从JDK 5.0开始自带了UUID的实现 java.util.UUID,示例用法如下:
[coolcode lang=”java”]
import java.util.UUID;

public class TestUUID {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i ++) { System.out.println(UUID.randomUUID().toString()); } } } [/coolcode] 输出如下结果: [coolcode linenum="off"] 2bc58ecd-dd48-4144-b5aa-2ebebaad300c 468a36ed-2eec-42fc-9524-d04a404a5d94 e43ea34d-3768-4ad0-8f28-dd8e61267103 dba317d5-688e-4656-bea5-4542b414481d f40408bb-df92-4118-8265-1e83f2810ae2 386e7c9d-b2af-4787-a171-6b1d9f350193 77a2eb19-0541-4fc3-a014-1b70840c42ec 4a00304e-d7e7-4a6f-bef3-4fb40ed7e1c2 631fdb01-1505-44e9-9e1b-3d84083651da bdb68883-ff9b-4b56-a825-940f45b3b3db [/coolcode] Hibernate中的使用

UUID algorithm
The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a
counter value (unique within the JVM). It’s not possible to obtain a MAC address or memory address from Java
code, so this is the best we can do without using JNI.

从hibernate reference中抄了个例子如下:
[coolcode lang=”xml”]





[/coolcode]