当前位置: 首页 > 知识库问答 >
问题:

在JAVA中运行查询的问题

夏侯瑞
2023-03-14
  sqlGrammarException: could not extract ResultSet
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long>{
@Query(value = "SELECT e.dob, e.name, e.marital FROM employee e\n" +
                "JOIN empuser eu ON e.empid = eu.empid \n" +
                "JOIN user u ON u.uid = eu.empid WHERE u.uid = = :uid", nativeQuery = true)
public Employee findEmployeeByUid(@Param("uid") long uid);
}
@Getter
@Setter
@Entity
@Table(name="employee")
public class Employee implements Serializable{
@Id
@Column(name="empid")
@GeneratedValue(strategy=GenerationType.IDENTITY)

long empId;
String name;
Date dob;
char gender;
String marital;
String nationality;
String photoFile;

//joining employee with address
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="tempaddress",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="aid")
)
Address tempAddress;

//joining employee with address
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="permaaddress",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="aid")
)
Address permaAddress;

//joining employee with contact
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empcontact",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="cid")
)
List <Contact> EmpContact;

//joining employee with familydetail
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empfamilydetail",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="fid")
)
FamilyDetail EmpFamilyDetail;

//joining employee with Health
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="emphealth",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="hid")
)
Health EmpHealth;

//joining employee with OfficeDetail
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empofficedetail",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="oid")
)
OfficeDetail EmpOfficeDetail;

//joining employee with team
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empteam",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="tid")
)
Set <Team> empteam;

//joining employee with IdentityDocuments
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empidentitydocuments",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="iid")
)
List <IdentityDocuments> EmpIdentityDocuments;


//joining employee with education 
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        @JoinTable(
                name="empdetails",
                joinColumns = @JoinColumn(name="empid"),
                inverseJoinColumns = @JoinColumn(name="eid")
            )
List<Education> empDetails;

//joining employee with role
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
        @JoinTable
        (
                name="emprole",
                joinColumns=@JoinColumn(name="empid"),
                inverseJoinColumns=@JoinColumn(name="rid")
        )
Role EmpRole;

//joining employee with user
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empuser",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="uid")
)
User EmpUser;

//Joining Employee with Attendance
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empattendance",
        joinColumns=@JoinColumn(name="empid"),
        inverseJoinColumns=@JoinColumn(name="attenid")
)
List<Attendance> EmpAttendance;

//Joining Employee with LeaveUsed
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable
(
        name="empleaveused",
        joinColumns=@JoinColumn(name="lusedid"),
        inverseJoinColumns=@JoinColumn(name="leaveid")
)
List<LeaveUsed> EmpLeaveUsed;

用户实体类:

@Getter
@Setter
@Table(name="user")
@Entity
public class User implements Serializable{
@Id
@Column(name="uid")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long uid;
private String userName;
private String password;
private boolean enabled;
private Date lastLogin;

//joining user with role
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable
(
        name="user_role",
        joinColumns=@JoinColumn(name="uid"),
        inverseJoinColumns=@JoinColumn(name="rid")
)
Role user_role;

感谢任何帮助。多谢了。

共有1个答案

宇文勇
2023-03-14

通常,JPA方法签名是list ,而不仅仅是employee。但是,由于您使用的是本机查询,返回类型应为list ,因此请使用此版本:

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    @Query(value = "SELECT e.dob, e.name, e.marital FROM employee e\n" +
                   "JOIN empuser eu ON e.empid = eu.empid \n" +
                   "JOIN user u ON u.uid = eu.empid WHERE u.uid = = :uid", nativeQuery = true)
    public List<Object[]> findEmployeeByUid(@Param("uid") long uid);
}

当访问上面列表中的每个object[]中的各个组件时,您需要进行一些手动封送处理。例如,要访问员工姓名:

List<Object[]> employees = employeeRepository.findEmployeeByUid(123L);
for (Object[] emp : employees) {
    String name = (String)emp[1];
}

本机查询经常需要这样的不吸引人的代码,所以我建议如果可能的话尝试使用纯JPA来表达您的查询。

 类似资料:
  • 问题内容: 我有一个带有表的数据库,该表充满了用于检查另一个数据库的条件和错误消息。 我想运行一个循环,以便对照第二个数据库中的所有表检查所有这些条件,并生成一个给出错误的报告。 这是可能的ms访问。 例如, querycrit表 我有超过400个类似这样的不同变量的查询。 我针对其运行查询的表是 记录表 问题答案: 这是更多示例代码。它说明了两种不同类型的记录集的用法。您可能希望阅读VBA陷阱:

  • 提前感谢! UPDATE:这是两个不同的查询,而不是delete查询中的语句。

  • 我遇到了一个奇怪的问题,使用Oracle Pivot语法的sql查询。我可以毫无问题地在SqlDeveloper中运行查询;然而,使用行映射器通过JdbcTemplate运行它会产生关于无效列名的奇怪错误。 SQL语句: 行映射器: DAO调用类:

  • 问题内容: 我有一张table: 我想构造一个语句,给定一个事件可以返回从该事件开始的事件“运行”的长度。运行由以下方式定义: 如果两个事件之间的时间间隔不超过30秒,则两个事件将同时运行。 如果A和B一起运行,并且B和C一起运行,则A与C一起运行。 但是,我的查询不需要在时间上倒退,因此,如果我选择事件2,则仅将事件2、3和4计为从2开始的事件运行的一部分,而应将3作为事件返回。运行时间。 有任

  • 他们说现在com.hp.hpl.jena.sparql.Engine.Binding.BindingMap在这个版本中不是一个简单的类,而是一个接口。 如果是这样,那么如何在当前版本中运行sparql查询。请根据我分享的代码给出一个例子。提前道谢。

  • connection方法似乎工作得很好,但当它执行调用“ExecuteQuery(sql)”方法的方法时,它会抛出SQLException。 我想我把jdbc驱动程序、ojdbc库和数据库配置得很好,但是我找不到为什么方法没有完成它的工作。有线索吗? 堆栈跟踪: