Пример гибернации для столбца Id - PullRequest
0 голосов
/ 19 февраля 2011

Когда я использую Hibernate Example API, столбец Id просто игнорируется, что очень раздражает.

У меня есть таблица Temp (Id, Descr) и соответствующий объект.

И я хочу сделать это:

Temp exampleObject;
exampleObject.setId(6);
exampleObject.setDescr("six");

DetachedCriteria criteria = DetachedCriteria.forClass(exampleObject.getClass()).add(example);
....

и полученный sql выглядит так

select this_.ID as ID0_0_, this_.DESCR as DESCR0_0_ 
from test.temp this_ where (lower(this_.DESCR)=?)

Где this_.ID = 6?

Другое странное поведение - при создании примера только с идентификатором:

Temp exampleObject;
exampleObject.setId(6);

DetachedCriteria criteria = DetachedCriteria.forClass(exampleObject.getClass()).add(example);
....

и полученный sql:

select this_.ID as ID0_0_, this_.DESCR as DESCR0_0_ 
from test.temp this_ where (1=1)

Почему игнорируется мое ограничение Id?

Вот мой файл отображения Hibernate:

@Entity
@Table(name = "temp", catalog = "test")
public class Temp implements java.io.Serializable {

    private static final long serialVersionUID = 9123374914153833823L;

    private int id;
    private String descr;

    public Temp() {
    }

    public Temp(int id) {
        this.id = id;
    }

    public Temp(int id, String descr) {
        this.id = id;
        this.descr = descr;
    }

    @Id
    @Column(name = "ID", unique = true, nullable = false)
    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(name = "DESCR", length = 45)
    public String getDescr() {
        return this.descr;
    }

    public void setDescr(String descr) {
        this.descr = descr;
    }

    @Override
    public String toString() {
        return "Temp [id=" + id + ", descr=" + descr + "]";
    }

}

Ответы [ 3 ]

1 голос
/ 22 февраля 2011

Подумав об этой проблеме, я приду к объяснению! Нет смысла добавлять первичный ключ в поиск с помощью поиска по примерам, поскольку существует только одна запись с этим идентификатором, и проще использовать get () или load (). Вот почему столбец Id игнорируется в Пример Hibernate API .

0 голосов
/ 27 июня 2015

@ Столбец избыточен, когда вы используете @Id, и вам нужно добавить ASSIGNED stratergy для назначения идентификатора из приложения

@Id
@GeneratedValue(strategy = GenerationType.ASSIGNED)
public int getId() {
    return this.id;
}
0 голосов
/ 19 февраля 2011

Я предполагаю, что ID - это ваш первичный ключ.если да, то как вы отобразили свой столбец идентификаторов в файле HBM.если вы привязали свой идентификатор к какому-либо внешнему ключу или автоматически сгенерированному номеру или последовательности, то вы не сможете настроить управляемые приложениями номера для определения первичного ключа.явно сказать Temp.setId (9).это будет устаревшим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...