Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Hibernate уникальность поля


Автор: Goganchic 26.10.2008, 23:08
Имеем прогу
Код

package hibernate.tutorial;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import ru.ucoz.gogsite.awots.data.Group;
import ru.ucoz.gogsite.awots.data.User;

public class Testing {

    /**
     * @param args
     */
    public static void main(String[] args) {
        SessionFactory sessionFactory = null;
        Session session = null;
        try {
            sessionFactory = new Configuration().configure()
                    .buildSessionFactory();
            session = sessionFactory.openSession();

            Transaction transaction = session.beginTransaction();

            Group group = new Group();
            group.setName("Admins");
            group.setCanManageTasks(true);
            group.setCanManageUsers(true);
            
            Set<User> users = new HashSet<User>();
            User user = new User();
            user.setName("Admin");
            user.setPassword("Admin");
            user.setEnabled(true);
            users.add(user);
            group.setUsers(users);
            session.save(group);
            transaction.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            session.flush();
            session.close();
            
            sessionFactory.close();
        }
    }

}


И мапинг на базу
Код

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="ru.ucoz.gogsite.awots.data.User" table="USERS">
        <id name="Id" type="long" column="ID">
            <generator class="native" />
        </id>

        <property name="name" unique="true" not-null="true">
            <column name="NAME" />
        </property>
        <property name="password" not-null="true">
            <column name="PASSWORD" />
        </property>
        <property name="enabled" not-null="true">
            <column name="ENABLED" />
        </property>
        
        <set name="marks" table="MARKS" cascade="all">
            <key column="USER_ID" />
            <one-to-many class="ru.ucoz.gogsite.awots.data.Mark" />
        </set>
    </class>
</hibernate-mapping>


Выполняем прогу 3 раза - получаем 3 записи с name=Admin, а вроде как стоит уникальность по полю name. Вопрос: что я делаю не так?

Автор: LSD 27.10.2008, 10:30
Если верить документации, проверка поля на уникальность ложиться на СУБД:
Цитата
unique (optional): Enable the DDL generation of a unique  constraint for the columns. Also, allow this to be the target of a property-ref.


Т.е. у тебя в базе должен быть сгенерирован соответствующий ключ.

Автор: Goganchic 27.10.2008, 11:14
LSD, не, в базе ничего к сожалению не генерируется, никаких дополнительных свойств у поля нет :(

Добавлено через 13 минут и 10 секунд
База - Postgresql 8.3

Автор: LSD 27.10.2008, 11:47
А DDL для базы генерирует Hibernate или ты?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)