首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring ManyToOne注脚

2013-04-26 
Spring ManyToOne注解?代码一:@Entity@Table(nameKS_ROLE_USER_AUTH)public class RoleUserAuthorizati

Spring ManyToOne注解

?

代码一:

@Entity@Table(name="KS_ROLE_USER_AUTH")public class RoleUserAuthorization extends Accountability{  @ManyToOne  @JoinColumn(name="ROLE_ID", nullable=false)  private Role role;  @ManyToOne  @JoinColumn(name="USER_ID", nullable=false)  private User user;

?

代码二:

@Entity@Table(name="KS_ROLE")@DiscriminatorColumn(name="role", discriminatorType=DiscriminatorType.STRING)public class Role extends Identity{  private static final long serialVersionUID = -8345993710464457036L;  @Column(name="ROLE_DESC")  private String roleDesc;  @OneToMany(fetch=FetchType.LAZY, mappedBy="role")  private List<RoleUserAuthorization> roleUsers;  public List<RoleUserAuthorization> getRoleUsers()  {    return this.roleUsers;  }  public void setRoleUsers(List<RoleUserAuthorization> roleUsers) {    this.roleUsers = roleUsers;  }

?

代码三:

@Entity@Table(name="KS_USER")@DiscriminatorColumn(name="User", discriminatorType=DiscriminatorType.STRING)public class User extends Identity{  private static final long serialVersionUID = 1828900234948658820L;  @Column(name="LAST_LOGIN_TIME")  @Temporal(TemporalType.TIMESTAMP)  private Date lastLoginTime;  @Column(name="USER_ACCOUNT")  private String userAccount;  @Column(name="USER_PASSWORD")  private String userPassword;  @Column(name="USER_DESC")  private String userDesc;  @Column(name="LAST_MODIFY_TIME")  private Date lastModifyTime;  public Set<RoleUserAuthorization> getRoles()  {    return new HashSet(RoleUserAuthorization.findAuthorizationByUser(this));  }

?

?

单向关系中的JoinColumn

?

joinColumns={         @JoinColumn(name="customer_id",referencedColumnName="id")}

?

?@JoinTable和@JoinColumn?领域层业务开发
//查找某个年龄段内的员工public static List<Employee> findByAgeRange(Integer from, Integer to) {    return getRepository().findByNamedQuery("findEmployeesByAgeRange", new Object[]{from, to}, Employee.class);} 
??

@JoinColumn写道@OneToOne

@JoinColumn(name = "addr_id")

public AddressEO getAddress() {

return address;

}

若此时,不设置name的值,则在默认情况下,name的取值遵循以下规则:

name=关联表的名称+“_”+ 关联表主键的字段名

例如,CustomerEO实体中,如果不指定name的值,默认将对应name=address_id;因为@JoinColumn注释在实体AddressEO属性上,实体AddressEO对应的表名为“address”;表address的主键是“id”,所以此时对应的默认的字段名称为“address_id”。


提示:此规则只适用于与@OneToOne标记同时使用时。若与@ManyToOne或@ManyToMany标记同时使用时,将遵循其他的规则。

l 默认情况下,关联的实体的主键一般是用来做外键的。但如果此时不想主键作为外键,则需要设置referencedColumnName属性。例如,将address表中增加一个字段“ref_id”,address表的建表SQL变为以下所示。

CREATE TABLE address (

id int(20) NOT NULL auto_increment,

ref_id int int(20) NOT NULL,

province varchar(50) ,

city varchar(50) ,

postcode varchar(50) ,

detail varchar(50) ,

PRIMARY KEY (id)

)

此时,通过customer表中的“address_id”字段关联的是address表中的“ref_id”,而“ref_id”并不是address表中的主键,则实体中标注如代码下所示。

@OneToOne

@JoinColumn(name = "address_id",referencedColumnName="ref_id")

public AddressEO getAddress() {

return address;

}


属性referencedColumnName标注的是所关联表中的字段名,若不指定则使用的所关联表的主键字段名作为外键。

l JoinColumn标记不仅能够与@OneToOne使用,也可以@ManyToOne或@ManyToMany标记同时使用,它们所表示的含义不同,这些内容将在下文详细讲述。 ?

热点排行