Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hibernate**ManyTone**单向映射在视图中检索数据_Java_Hibernate_Spring Mvc - Fatal编程技术网

Java 使用hibernate**ManyTone**单向映射在视图中检索数据

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

我第一次尝试使用hibernate多对一单向映射

   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查询会导致错误吗?