Java 使用hibernate**ManyTone**单向映射在视图中检索数据
我第一次尝试使用hibernate多对一单向映射Java 使用hibernate**ManyTone**单向映射在视图中检索数据,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,我第一次尝试使用hibernate多对一单向映射 create table CGroup_1(GID number(10) NOT NULL, DATECREATED date, EMAILADDRESS VARCHAR2(255), GNAME VARCHAR2(255),PRIMARY KEY(GID)); create
create table CGroup_1(GID number(10) NOT NULL,
DATECREATED date,
EMAILADDRESS VARCHAR2(255),
GNAME VARCHAR2(255),PRIMARY KEY(GID));
create table EMP_TBL_1 (
eid number(10) not null,
account_locked number(1),
createdDate date,
email varchar2(255),
enabled number(1),
expiryDate date,
firstName varchar2(255),
lastNmae varchar2(255),
pwd varchar2(255),
postCode varchar2(255),
groupId number(10),
PRIMARY KEY(eid));
ALTER TABLE EMP_TBL_1
ADD FOREIGN KEY (groupId) REFERENCES CGroup_1(GID);
Employee.java
@Entity
@Table(name="EMP_TBL_1")
public class Employee implements Serializable {
private static final long serialVersionUID=47L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int eid;
@Column
private String firstName;
@Column
private String lastNmae;
@Column
private String email;
@Column
private String pwd;
@Column
private boolean account_locked;
@Column
private boolean enabled;
@Column
private Date createdDate;
@Column
private Date expiryDate;
@Column
private String postCode;
@Column
private CorporateGroup group;
@Column
private int gid;
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name = "gid",referencedColumnName="gid")
public CorporateGroup getGroup() {
return group;
}
public void setGroup(CorporateGroup group) {
this.group = group;
}
//getters and setters
}
@Repository
public class EmployeeDAOImpl implements EmployeeDAO {
@Autowired
private SessionFactory sessionFactory;
public void addEmployee(Employee emp) {
sessionFactory.getCurrentSession().saveOrUpdate(emp);
}
@SuppressWarnings("unchecked")
public List<Employee> getGroupEmployees(CorporateGroup group) {
return sessionFactory.getCurrentSession().createQuery("from Employee emp
where emp.gid=?").setInteger(0,group.getId()).list();
}
}
@Repository
public class CorporateGroupDAOImpl implements CorporateGroupDAO{
@Autowired
private SessionFactory sessionFactory;
public void addGroup(CorporateGroup group) {
sessionFactory.getCurrentSession().saveOrUpdate(group);
}
@SuppressWarnings("unchecked")
public List<CorporateGroup> getAllGroups() {
return sessionFactory.getCurrentSession().createQuery("from
CorporateGroup")
.list();
}
public CorporateGroup getGroup(int id) {
return (CorporateGroup)
sessionFactory.getCurrentSession().get(CorporateGroup.class,id);
}
}
CorporateGroup.java:
@Entity
@Table(name="CGroup_1")
public class CorporateGroup implements Serializable {
private static final long serialVersionUID=17L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int gid;
@Column
private String gname;
@Column
private String emailAddress;
@Column
private Date dateCreated;
//getters and setters
}
employeedaimpl.java
@Entity
@Table(name="EMP_TBL_1")
public class Employee implements Serializable {
private static final long serialVersionUID=47L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int eid;
@Column
private String firstName;
@Column
private String lastNmae;
@Column
private String email;
@Column
private String pwd;
@Column
private boolean account_locked;
@Column
private boolean enabled;
@Column
private Date createdDate;
@Column
private Date expiryDate;
@Column
private String postCode;
@Column
private CorporateGroup group;
@Column
private int gid;
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name = "gid",referencedColumnName="gid")
public CorporateGroup getGroup() {
return group;
}
public void setGroup(CorporateGroup group) {
this.group = group;
}
//getters and setters
}
@Repository
public class EmployeeDAOImpl implements EmployeeDAO {
@Autowired
private SessionFactory sessionFactory;
public void addEmployee(Employee emp) {
sessionFactory.getCurrentSession().saveOrUpdate(emp);
}
@SuppressWarnings("unchecked")
public List<Employee> getGroupEmployees(CorporateGroup group) {
return sessionFactory.getCurrentSession().createQuery("from Employee emp
where emp.gid=?").setInteger(0,group.getId()).list();
}
}
@Repository
public class CorporateGroupDAOImpl implements CorporateGroupDAO{
@Autowired
private SessionFactory sessionFactory;
public void addGroup(CorporateGroup group) {
sessionFactory.getCurrentSession().saveOrUpdate(group);
}
@SuppressWarnings("unchecked")
public List<CorporateGroup> getAllGroups() {
return sessionFactory.getCurrentSession().createQuery("from
CorporateGroup")
.list();
}
public CorporateGroup getGroup(int id) {
return (CorporateGroup)
sessionFactory.getCurrentSession().get(CorporateGroup.class,id);
}
}
启用后,hibernate.show_sql=true
我可以在控制台中看到以下内容:
Hibernate:
select
corporateg0_.gid as gid1_0_0_,
corporateg0_.dateCreated as dateCreated2_0_0_,
corporateg0_.emailAddress as emailAddress3_0_0_,
corporateg0_.gname as gname4_0_0_
from
CGroup_1 corporateg0_
where
corporateg0_.gid=?
Hibernate:
select
employee0_.eid as eid1_1_,
employee0_.account_locked as account_locked2_1_,
employee0_.createdDate as createdDate3_1_,
employee0_.email as email4_1_,
employee0_.enabled as enabled5_1_,
employee0_.expiryDate as expiryDate6_1_,
employee0_.firstName as firstName7_1_,
employee0_.gid as gid8_1_,
employee0_.group as group9_1_,
employee0_.lastNmae as lastNmae10_1_,
employee0_.postCode as postCode11_1_,
employee0_.pwd as pwd12_1_
from
EMP_TBL_1 employee0_
where
employee0_.gid=?
我的忠告是:
第一,尽量不要在字段和访问方法之间混合使用JPA注释(选择一个并坚持使用它)。。。因此,请尝试将@manytone注释从access方法传递到字段组
第二,employee表中没有列“gid”。。。要映射的列是“groupId”
。。。因此,删除字段:@Column private int gid代码>
并更正@JoinColumn注释,如下所示:
@JoinColumn(name = "groupId", referencedColumnName = "gid")
希望这有帮助 我的建议:
第一,尽量不要在字段和访问方法之间混合使用JPA注释(选择一个并坚持使用它)。。。因此,请尝试将@manytone注释从access方法传递到字段组
第二,employee表中没有列“gid”
。。。要映射的列是“groupId”
。。。因此,删除字段:@Column private int gid代码>
并更正@JoinColumn注释,如下所示:
@JoinColumn(name = "groupId", referencedColumnName = "gid")
希望这有帮助 能否在hibernate设置中启用“hibernate.show_sql”属性并在日志中显示sql语句?如何在hibernate配置文件中定义实体?@AlexanderFedyukov:我启用了hibernate.show\u sql。实体是使用代码I shared中的注释定义的,sql查询会导致错误?能否在hibernate设置中启用“hibernate.show_sql”属性并在日志中显示sql语句?如何在hibernate配置文件中定义实体?@AlexanderFedyukov:我启用了hibernate.show\u sql。实体是使用代码I shared中的注释定义的,sql查询会导致错误吗?