powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
14 сообщений из 14, страница 1 из 1
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37799434
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть сущность, а в ней вот такое поле:
Код: sql
1.
2.
    @EmbeddedId
    protected SluchPK sluchPK;


То есть у таблицы в БД составной PrimaryKey.

SluchPK вот такой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Embeddable
public class SluchPK implements Serializable {
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 36)
    @Column(name = "ID_PAK", nullable = false, length = 36)
    private String idPak;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 36)
    @Column(name = "ID_SLUCH", nullable = false, length = 36)
    private String idSluch;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(classname);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
...
...
Expression myexp = from.get("Что тут писать???").as(someclass); // Я не знаю что тут писать - у меня всё валится от этого! EJB Transaction Exception!
mypredicate = criteriaBuilder.equal(myexp, some_var);
...
...
criteriaQuery.where(main_predicate);
TypedQuery<Object> typedQuery = em.createQuery(select);
some_ret = typedQuery.getResultList();


Если так:
Expression myexp = from.get("idSluch").as(someclass);
то исключение EJB Transaction Exception!
Что писать в from.get() в случае составного ключа таблицы???
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37799445
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sluchPK.idSluch, вероятно. Но вы вместо кода лучше бы внятно вопрос сформулировали.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37799471
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица, у которой составной Primary Key.
Соответственно сущность имеет поле с аннотацией @EmbeddedId.
Я использую такой код для получения данных из таблиц Oracle:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Object> from = criteriaQuery.from(classname);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
...
...
        criteriaQuery.where(main_predicate);
        TypedQuery<Object> typedQuery = em.createQuery(select);
        some_ret = typedQuery.getResultList();



Как получить такой Expression:
Expression myexp = from.get("Что тут писать???").as(someclass);
, если поле составное???

авторsluchPK.idSluch попробую...
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37799571
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Expression myexp = from.get("Что тут писать???").as(someclass);
, если поле составное???

Тут писать свойство вашей сущности Object. Мы же не знаем что у вас там за сущность и какое именно её свойство вы хотите получить. В вашей сущности, вероятно нет свойства idSluch.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37799587
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага! Я дошёл!!!
Вот работающий код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
        CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
        CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
        Root<Sluch> from = criteriaQuery.from(Sluch.class);
        CriteriaQuery<Object> select = criteriaQuery.select(from);
        Expression myexp = from.get("sluchPK").get("idPak").as(Sluch.class);
        Predicate mypredicate = criteriaBuilder.equal(myexp, "Hello World!");
        criteriaQuery.where(mypredicate);
        TypedQuery<Object> typedQuery = em.createQuery(select);
        Object some_ret = typedQuery.getResultList();


Выкладываю - может быть кому-нибудь, когда-нибудь понадобится!

Суть в том, что если у нас составной ключ, то надо обратиться к нему через 2 get'а. Таким образом, если у нас вложенность n-уровневая, то и get'ов будет n штук.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37799611
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К слову. Если вы так же разрабатываете структуру базы, то большой надобности в композитных ключах нет. Просто добавьте ещё один синтетический ключ для PK. Делать PK на базе нескольких FK не очень удобно, особенно для работы через ORM.
А целостность базы контролируйте уникальными констрейнтами, вместо компазитных ключей.

Хотя во многих статьях по прокетированию БД композитные ключи приветствуются, я особой пользы от них пока не вижу.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37799692
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, базу не я проектирую, а проектировщик базы. Вот он в нескольких таблицах и нафигачил этих композитных PrimaryKey, а есть таблицы, почти все поля которых, кроме одного, например, PrimaryKey.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37800314
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Не, базу не я проектирую, а проектировщик базы. Вот он в нескольких таблицах и нафигачил этих композитных PrimaryKey, а есть таблицы, почти все поля которых, кроме одного, например, PrimaryKey.
Побщайтесь с ним. Может договоритесь о том чтобы ещё синтетические ключи добавить. Ведь с композитными ключами можно прийти к дизайну 3-4 колонки на PK. Не очень-то. Или 3 колонки на FK - тоже ещё тот геморрой.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37803287
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Побщайтесь с ним. Может договоритесь о том чтобы ещё синтетические ключи добавить. Ведь с композитными ключами можно прийти к дизайну 3-4 колонки на PK. Не очень-то. Или 3 колонки на FK - тоже ещё тот геморрой.
О!
У меня есть таблица, в которой всего 7 колонок, 6 колонок - Primary Key и 3 - Foreign Key.
Есть ещё 1 таблица всего 4 колонки, из них 4 Primary Key и 3 - Foregn Key. И ещё одна: 5 колонок , из них 4 Primary Key и 3 - Foregn Key. Весело...
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37803391
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у меня вопрос появился.
А как я буду делать em.merge(Entity en), если у меня вся строка - это Primary Key?
Как EntityManager поймёт какую строку update'ить?
Наверное, надо по поводу некоторых таблиц пообщаться...
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37803400
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000А у меня вопрос появился.
А как я буду делать em.merge(Entity en), если у меня вся строка - это Primary Key?
Как EntityManager поймёт какую строку update'ить?
Наверное, надо по поводу некоторых таблиц пообщаться...
Если у вас вся строка это один PK, то, вероятно, это связывающая таблица для Many-to-Many, т.е. можно замапить вообще без сущности. Либо если сущность существует, то с ней никогда нет выделеной работы. Она обрабатывается каскадами из остальных сущностей.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37803410
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000У меня есть таблица, в которой всего 7 колонок, 6 колонок - Primary Key и 3 - Foreign Key.
Есть ещё 1 таблица всего 4 колонки, из них 4 Primary Key и 3 - Foregn Key. И ещё одна: 5 колонок , из них 4 Primary Key и 3 - Foregn Key. Весело...
Погуглите на эту тему:
http://stackoverflow.com/questions/3877325/composite-primary-key-or-single-primary-key
Соберите все аргументы и предоставьте дизайнеру вашей базы.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37803455
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если у вас вся строка это один PK, то, вероятно, это связывающая таблица для Many-to-Many, т.е. можно замапить вообще без сущности. Либо если сущность существует, то с ней никогда нет выделеной работы. Она обрабатывается каскадами из остальных сущностей.
А, да не, там связь Many-to-One. Это просто таблица, в которой, так уж получилось 3 реальных PK, они же и FK, а 4-ый - это просто значение, которое не должно повторяться 2 раза, ну, его и засунули в PK. Есть ещё похожие случаи.
А мне это как-то не очень нравится.
...
Рейтинг: 0 / 0
Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
    #37803562
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczNiky4000У меня есть таблица, в которой всего 7 колонок, 6 колонок - Primary Key и 3 - Foreign Key.
Есть ещё 1 таблица всего 4 колонки, из них 4 Primary Key и 3 - Foregn Key. И ещё одна: 5 колонок , из них 4 Primary Key и 3 - Foregn Key. Весело...
Погуглите на эту тему:
http://stackoverflow.com/questions/3877325/composite-primary-key-or-single-primary-key
Соберите все аргументы и предоставьте дизайнеру вашей базы.
+1
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно написать условие поиска по составному ключу типа @EmbeddedId?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]