Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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
映射hibernate SQLQuery native返回java实体中的空对象_Java_Hibernate_Jpa_Jdbc_Hql - Fatal编程技术网

映射hibernate SQLQuery native返回java实体中的空对象

映射hibernate SQLQuery native返回java实体中的空对象,java,hibernate,jpa,jdbc,hql,Java,Hibernate,Jpa,Jdbc,Hql,我的oracle数据库中有两个表 和两个实体用户和命令 @Entity @Table(name = "Users") public class User { private int idUser; private String login; private String password; private List<Command> commands = new ArrayList<>

我的oracle数据库中有两个表

和两个实体用户和命令

@Entity 
@Table(name = "Users")
public class User {

    private int idUser;
    
    private String login;
    
    private String password;
    
    private List<Command> commands = new ArrayList<>();

    
    public User() { }
    
    public User( String login, String password ) {
        super();
        this.setLogin( login );
        this.setPassword( password );
    }

    @Id
    @Column(name = "USER_ID", unique = true, nullable = false, scale = 0)
    public int getIdUser() {
        return idUser;
    }
    
    @Column(name = "USER_LOGIN", nullable = false)
    public String getLogin() {
        return login;
    }
    
    public void setLogin(String login) {
        this.login = login;
    }

    @Column(name = "USER_PASSWORD", nullable = false)
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
    
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "utilisateur")
    public List<Command> getCommands() {
        return commands;
    }
    
    public String toString() {
        return this.idUser + ": " + this.login + "/" + this.password 
             ;
    }
    
}



@Entity  
@Table(name="Commands")
public class Command {

    
    private int idCommand;
    
    private User utilisateur;
    
    private Date commandDate;
    
    
    public Command() {}
    
    public Command( User user, Date commandDate ) {
        this.setUser( user );
        this.setCommandDate( commandDate );
    }

    @Id
    @Column(name = "CMD_Id", unique = true, nullable = false, scale = 0)
    public int getIdCommand() {
        return idCommand;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "USER_ID")
    public User getUtilisateur() {
        return user;
    }

    public void setUtilisateur(User user) {
        this.user = user;
    }
    
    @Column(name = "CMD_DATE")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getCommandDate() {
        return commandDate;
    }
    
    public void setCommandDate(Date commandDate) {
        this.commandDate = commandDate;
    }
    
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append( "Commande de >> " ).append( this.user )
               .append( " - " ).append( this.commandDate ).append( "\n" );
        return builder.toString();
    }   
    
}
@实体
@表(name=“Users”)
公共类用户{
私有用户;
私有字符串登录;
私有字符串密码;
private List commands=new ArrayList();
公共用户(){}
公共用户(字符串登录,字符串密码){
超级();
this.setLogin(login);
此.setPassword(密码);
}
@身份证
@列(name=“USER\u ID”,unique=true,nullable=false,scale=0)
public int getIdUser(){
返回idUser;
}
@列(name=“USER\u LOGIN”,null=false)
公共字符串getLogin(){
返回登录;
}
公共void setLogin(字符串登录){
this.login=登录;
}
@列(name=“USER\u PASSWORD”,null=false)
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
@OneToMany(fetch=FetchType.LAZY,mappedBy=“利用者”)
公共列表getCommands(){
返回命令;
}
公共字符串toString(){
返回this.idUser+“:“+this.login+”/“+this.password”
;
}
}
@实体
@表(name=“Commands”)
公共类命令{
私有int-idCommand;
私人用户利用者;
私人日期;
公共命令(){}
公共命令(用户,日期命令日期){
this.setUser(用户);
这个.setCommandDate(commandDate);
}
@身份证
@列(name=“CMD_Id”,unique=true,nullable=false,scale=0)
公共int getIdCommand(){
返回id命令;
}
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“USER\u ID”)
公共用户getUsilizateur(){
返回用户;
}
公共无效设置用户(用户){
this.user=用户;
}
@列(name=“CMD_DATE”)
@时态(TemporalType.TIMESTAMP)
公共日期getCommandDate(){
返回命令日期;
}
公共无效setCommandDate(日期commandDate){
this.commandDate=commandDate;
}
公共字符串toString(){
StringBuilder=新的StringBuilder();
builder.append(“Commande de>>”).append(this.user)
.append(“-”).append(this.commandDate).append(“\n”);
返回builder.toString();
}   
}
还有我的服务java类

@Service
@Transactional
public class MyServiceImpl implements MyService {
    private static final long serialVersionUID = 8393594103219622298L;

    private static final String MY_ADVANCED_REQUEST 
        ="select us.USER_ID, cd.CMD_DATE, us.USER_PASSWORD " +
    "from Users us , Commands cd ON us.USER_ID = cd.USER_ID " +
    "where us.USER_ID = cd.USER_ID " +
    "AND us.USER_ID = 5";
    
    public List<Object> findUsersCmd() {
        String query1 = MY_ADVANCED_REQUEST;
        SQLQuery queryObj = sessionFactory.getCurrentSession().createSQLQuery(query1);
        List<Object> lstObj =queryObj.list(); 
        return lstObj;
    }
    
}
@服务
@交易的
公共类MyServiceImpl实现了MyService{
私有静态最终长serialVersionUID=8393594103219622298L;
私有静态最终字符串MY_ADVANCED_请求
=“选择us.USER\U ID、cd.CMD\U日期、us.USER\U密码”+
“从用户us,命令us上的cd.USER\U ID=cd.USER\U ID”+
“其中us.USER\u ID=cd.USER\u ID”+
“和us.USER_ID=5”;
公共列表findUsersCmd(){
字符串query1=我的高级请求;
sqlqueryqueryobj=sessionFactory.getCurrentSession().createSQLQuery(query1);
List lstObj=queryObj.List();
返回lstObj;
}
}
我在这一行中得到一个空列表list lstObj=queryObj.list()

我使用的是请求SQLQuery,而不是jpa

我想为us.USER\u ID=5得到1个对象(即使我在表命令中没有us.USER\u ID=5),为us.USER\u ID=1得到3个对象(因为命令表中有3行);用户ID=6(因为Commands表中有1行)


如何解决为我的us.USER\u ID=5返回值的问题?

左外部联接返回第一个表中的所有行,而仅返回第二个表中匹配的行。(虽然commands表中不存在用户\u ID=5,但可以检索该用户)

 private static final String MY_ADVANCED_REQUEST 
        ="select us.USER_ID, cd.CMD_DATE, us.USER_PASSWORD " +
    "from Users us LEFT JOIN Commands cd ON us.USER_ID = cd.USER_ID ";