日期:2014-05-18  浏览次数:20818 次

annotation 注解实现非主键关联
怎样实现非主键一对多双向关联
数据表:
CREATE TABLE `module` (
 `module_id` INT(11) NOT NULL AUTO_INCREMENT,
 `module_code` VARCHAR(32) NOT NULL COMMENT '模块编码',
 `module_name` VARCHAR(64) NOT NULL COMMENT '模块名称',
PRIMARY KEY (`module_id`)
 )
 CREATE TABLE `user_permission` (
 `permission_id` INT(11) NOT NULL AUTO_INCREMENT,
 `product_group_id` VARCHAR(32) NOT NULL COMMENT '外键关联sys_application表的app_code', 
        PRIMARY KEY (`permission_id`)
 ) 
实例:
@Entity
@Table(name ="module")
public class Module{
@Id
@Column(name ="module_id")
@GeneratedValue           
private Integer id;

@Column(name="module_code")
private String moduleCode;

@OneToMany(mappedBy = "module",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE},fetch=FetchType.LAZY)
@JoinColumn(name="module_code")
private Set<UserPermission> userPermission;
}
@Entity
@Table(name ="user_permission")
public class UserPermission{
@Id
@Column(name ="permission_id")
@GeneratedValue           
private Integer id;

@Column(name="product_group_id")
private String productGroupId;
@ManyToOne(targetEntity = Module.class,fetch=FetchType.LAZY)
@JoinColumn(name="module_group_id",insertable = false, updatable = false,referencedColumnName="module_code")
private Module module;
}
------解决方案--------------------
ClassCastException,类型转换错误,你把Module 类转换为Serializable了。
你这种注解方式已经严重的不提倡了,配置文件多好。
------解决方案--------------------
hibernate配置实体类。