在EasyJWeb中有一个标签是相当的有用,就是@POLoad的标签:
OLoad是在toPo方法调用时,
根据POLoad中定义的name属性传入的值(默认为id)作为对象的id,通过GenericDAO来自动加载标记的那个属性的类型对应的对象。
比如
@POLoad(name="myId")
private MyClass myClass;
就会在toPo的时候,得到myId传入的值,并且把这个值作为MyClass类型的id,去查询这个id对应的MyClass实例。
今天我也做了一个例子:
如:
这个是留言message的domain中的对象。里面有这个标记
@ManyToOne
@POLoad(name="userId")
private User opUser;
说明,我在页面上有一个userid的表单就可以直接保存message的对象了。
如果没有这个@POLoad的标签来指明表opUser对应的表单时,你必须要通过这个表单的值来查询出User对象,然后在把他们关联在一起,才可以保存message这个域对象。
1、synchronized关键字的作用域有二种:
1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的 synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法;
2)是某个类的范围,synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。
2、除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/*区块*/},它的作用域是当前对象;
3、synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法;
JPA的@Embedded,通过此注释可以在你的Entity中使用一般的java对象,此对象需要用@Embeddable标注
public class Member extends User {
@Field(name = "用户地址")
@Embedded
private Address address;
//get及set方法
}
@Embeddable
public class Address implements java.io.Serializable {
@Column(length = 16)
private String region;//区域
@Column(length = 50)
private String country;//国家
@Column(length = 20)
private String province;//省份
@Column(length = 50)
private String city;//城市
@Column(length = 50)
private String town;//乡镇
@Column(length = 50)
private String street;//街道
@Column(length = 20)
private String doorPlate;// 门牌号
//get及set方法
}
这样可以把Address的属性放在Member中,Member域对象生成的数据表中将会包含Address的这些字段。说明这个Address的域对象也可以集成到别的域对象中而成为该域对象的相应的字段,说明可以重用此域对象。