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配置实体类。