我有兩個MYSQL表:帳戶和用戶。一個用戶可以擁有多個帳戶,所以它是一對多的關係。 帳戶有以下列:id,用戶,標題,銀行,類型。它也有一個條目:休眠無法執行查詢無效的值getInt()
1 USER1檢查BANKNAME借記
用戶有列:ID,第一個,最後,用戶名,密碼。它有一個入口,以及:
約翰Doe的user1的獵頭
我所做的類和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>
這是我的用戶類
import 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'
我不明白爲什麼它會使用ge tInt(),它顯然是一個String或Class。
你的評估是不正確的。在多對一的情況下,名稱值必須與Java類中相應的字段名稱匹配。列值將是數據庫中的列名稱。 Hibernate將自動使用主鍵作爲外鍵關聯。 – markbernard 2014-11-07 14:36:32
您指的是JPA註釋。這裏是休眠xml配置 – grid 2014-11-07 14:44:28
在我的工作中,我們也使用XML,因爲我們僅限於我們可以使用的Hibernate版本。我的聲明是指XML配置。您需要定位Java字段名稱,以便Hibernate知道如何創建每個對象並正確連接它們。 Hibernate默認連接主鍵上的表。 – markbernard 2014-11-07 15:23:42