Невозможно получить автоматически сгенерированный ключ в Hibernate - PullRequest
2 голосов
/ 25 декабря 2010

Я создал простую таблицу, как показано ниже.

CREATE TABLE CUSTOMERS
(
    CUST_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
    CUSTOMER_NAME VARCHAR(24) NOT NULL,
    REGION VARCHAR(26),
    PRIMARY KEY (CUST_ID)
);

Затем я создал сопоставление для этой таблицы с этим файлом сопоставления

<class name="Customer" table="CUSTOMERS">
    <id  type="int" column="CUST_ID" >
        <generator class="native"></generator>
    </id>
    <property name="customerName" type="string" column="CUSTOMER_NAME" />
    <property name="region" type="string" column="REGION"/>
</class>

Затем я создал простой класс, как показано ниже, для доступа к БД.

public class CustomerDao {

    public void addCustomer(Customer customer) {
        Session session = SessionManager.getSessionFactory()
                .getCurrentSession();
        session.beginTransaction();
        session.saveOrUpdate(customer);
        session.getTransaction().commit();
    }

    public List<Customer> getAllCustomer() {
        Session session = SessionManager.getSessionFactory()
                .getCurrentSession();
        session.beginTransaction();
        List<Customer> booksList = session.createQuery("from Customer").list();
        session.getTransaction().commit();
        return booksList;
    }
}

Класс Customer - это просто POJO

public class Customer {
    private int customerID;
    private String customerName;
    private String region;
    //getters setters
}

Но он не привязывается к сгенерированному ключу в таблице.

public class Starter {
    public static void main(String[] args) {
        List<Customer> lstCust = daoCust.getAllCustomer();
        for (Customer cust : lstCust) {
            System.out.println(cust);
        }
    }
}

Вывод похож на эти?

Customer Details:
------------
Customer ID:0
Customer Name: Symera
Region:Asia

Customer Details:
------------
Customer ID:0
Customer Name: Indra
Region:US

Customer Details:
------------
Customer ID:0
Customer Name:Istaf
Region:US

Я что-то упустил в своем отображении? Добавление клиента не вызывает проблем, но получение автоматически сгенерированного ключа имеет.

1 Ответ

5 голосов
/ 25 декабря 2010

Я думаю, что проблема с отсутствующим атрибутом имени для тега id в вашем файле hbm может быть проблемой:

<id  type="int" column="CUST_ID" name="customerID">
        <generator class="native"></generator>
    </id>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...