以下有两个实体类:
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
@Entity(name="record")
public class Record extends BaseObject {
private String name; //姓名
private String sex; //性别
private Date birthday; //出生年月
private String family; //民族
private String marital_status; //婚姻状况
private String politics_status; //政治面貌
private String id_number; //身份证号
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载
@JoinColumn(name="record_id")//在eduexp表增加一个外键列来实现一对多的单向关联
private Set<Eduexp> eduexp = new HashSet<Eduexp>(); //教育培训经历
省略 getter 和 setter 方法
}
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity(name="eduexp")
public class Eduexp extends BaseObject {
private Date edu_time; //起始时间
private Date edu_endtime;//结束时间
private String edu_org; //教育培训机构
private String course; //专业或课程
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = false)
private Record record;
省略 getter 和 setter 方法
}
我想通过 eduexp 中的外键 record_id 查询 eduexp 中的数据。
查询方法:
public String queryReocrdData(){
StringBuffer str_hql = new StringBuffer();
str_hql.append("SELECT new com.ewayit.model.Eduexp(E.edu_time, E.edu_endtime, E.edu_org, E.course) FROM ")
.append("com.ewayit.model.Eduexp E WHERE E.RECORD_ID = ?1");
try {
toJson(getService().find(str_hql.toString(), id));
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException | IntrospectionException e) {
e.printStackTrace();
}
return Action.SUCCESS;
}
但是报错:
------解决思路----------------------
sql 写错了吧, ? 怎么有个1
------解决思路----------------------
实体是否有RECORD_ID 属性
------解决思路----------------------
实体加一个RECORD_ID 属性
------解决思路----------------------
@JoinColumn(name="record_id")
这个实体都没有建立这个属性啊 被关联的对象当然就找不到了
增加一个record_id
------解决思路----------------------
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载
@JoinColumn(name="record_id")//在eduexp表增加一个外键列来实现一对多的单向关联
private Set<Eduexp> eduexp = new HashSet<Eduexp>(); //教育培训经历
这里@JoinColumn应该是不需要的,你需要的是mappedby属性
你应该加个
mappedby="record"
其数据库中的列名将默认为"record_id",而你对应实体中的属性名则为record,这样就能符合你的要求了吧