gpt4 book ai didi

java - Hibernate 无法执行查询 getInt() 的值无效

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:57 26 4
gpt4 key购买 nike

我有两个 MYSQL 表:帐户和用户。一个用户可以拥有多个帐户,因此这是一对多的关系。帐户具有以下列:id、用户、标题、银行、类型。它还有一个条目:

1 user1 Checking BankName Debit

用户具有以下列:id、第一个、最后一个、用户名、密码。它也有一个条目:

1 John Doe user1 hunter2

我已经为每个创建了类和 hibernate 映射:

public class Account {

private int id;
private User user;
private String title;
private String bank;
private String type;
private double amount;

public Account() {
}

public Account(User usr, String nm, String bnk, String typ) {
this.user = usr;
this.name = ttl;
this.bank = bnk;
this.type = typ;
}
//getters and setters
}

这是我的映射

<class name="com.package.dao.beans.Account" table="budgeting.ACCOUNT">
<meta attribute="class-description">
This class contains the account detail.
</meta>
<id name="id" type="int" column="id">
<generator class="native" />
</id>
<many-to-one name="user" class="com.package.dao.beans.User"
column="user" unique="true" not-null="true"/>
<property name="title" column="title" type="string" />
<property name="bank" column="bank" type="string" />
<property name="type" column="type" type="string" />

</class>

这是我的用户类

导入java.util.Set;

public class User {
private int id;
private String first;
private String last;
private String username;
private String password;

public User() {
};

public User(String fName, String lName, String uName, String pass) {
this.first = fName;
this.last = lName;
this.username = uName;
this.password = pass;
};
//getters and setters
}

以及帐户映射

    <class name="com.package.dao.beans.User" table="budgeting.users">
<meta attribute="class-description">
This class contains the account detail.
</meta>
<id name="id" type="int" column="id">
<generator class="native" />
</id>
<property name="first" column="first" type="string" />
<property name="last" column="last" type="string" />
<property name="username" column="username" type="string" />
<property name="password" column="password" type="string" />
</class>

当我运行一些代码来打印所有帐户(仅一个)时,

public class ManageAccount {
private static SessionFactory factory;

public static void main(String[] args) {
try {
factory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}

Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
List accounts = session.createQuery("FROM Account").list();
for (Iterator iterator = accounts.iterator(); iterator.hasNext();) {
Account acc = (Account) iterator.next();
// System.out.print("First Name: " + acc.getUser().getFirst());
System.out.print(" Last Name: " + acc.getName());
System.out.println(" Salary: " + acc.getType());
}
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

我收到此错误

org.hibernate.exception.GenericJDBCException: could not execute query
Caused by: java.sql.SQLException: Invalid value for getInt() - 'user1'

我不明白为什么它会使用 getInt(),它显然是一个字符串或类。

最佳答案

问题是由于以下映射造成的

<many-to-one name="user" class="com.package.dao.beans.User"
column="user" unique="true" not-null="true"/>

它实际上说的是,帐户实体被映射为与一个用户的关系的许多部分,使用帐户表的列用户作为外键。但User的主键是int

    <id name="id" type="int" column="id">
<generator class="native" />
</id>

而从示例数据推断出的帐户中的用户列显然是用户名(即字符串)。

您可以做的是使用用户 ID (int) 作为帐户表中的外键,而不是用户名

关于java - Hibernate 无法执行查询 getInt() 的值无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26790959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com