Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227

Hibernate: class org.hibernate.type.internal.NamedBasicTy­peImpl cannot be cast to class org.hibernate.metamodel.mapping

04.10.2022, 00:17. Показов 1156. Ответов 0

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Сталкиваюсь с такой ошибкой при попытке получить результат HQL запроса с join-ом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Hibernate: insert into ships (characteristics, creation_year, dock, model, title) values (?, ?, ?, ?, ?)
окт. 04, 2022 12:05:57 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 0, SQLState: 23505
окт. 04, 2022 12:05:57 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "ships_pkey"
  Подробности: Ключ "(title)=(Pobeda)" уже существует.
окт. 04, 2022 12:05:57 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
Hibernate: insert into races (destination, source, arrival_date, ship_name, start_date) values (?, ?, ?, ?, ?)
Exception in thread "main" java.lang.ClassCastException: class org.hibernate.type.internal.NamedBasicTypeImpl cannot be cast to class org.hibernate.metamodel.mapping.EntityValuedModelPart (org.hibernate.type.internal.NamedBasicTypeImpl and org.hibernate.metamodel.mapping.EntityValuedModelPart are in unnamed module of loader 'app')
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitTableGroup(BaseSqmToSqlAstConverter.java:3491)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQualifiedAttributeJoin(BaseSqmToSqlAstConverter.java:3426)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQualifiedAttributeJoin(BaseSqmToSqlAstConverter.java:414)
    at org.hibernate.query.sqm.tree.domain.AbstractSqmAttributeJoin.accept(AbstractSqmAttributeJoin.java:131)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitComparisonPredicate(BaseSqmToSqlAstConverter.java:6517)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitComparisonPredicate(BaseSqmToSqlAstConverter.java:414)
    at org.hibernate.query.sqm.tree.predicate.SqmComparisonPredicate.accept(SqmComparisonPredicate.java:104)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitWhereClause(BaseSqmToSqlAstConverter.java:2262)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:1833)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:414)
    at org.hibernate.query.sqm.tree.select.SqmQuerySpec.accept(SqmQuerySpec.java:122)
    at org.hibernate.query.sqm.spi.BaseSemanticQueryWalker.visitQueryPart(BaseSemanticQueryWalker.java:213)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQueryPart(BaseSqmToSqlAstConverter.java:1689)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitSelectStatement(BaseSqmToSqlAstConverter.java:1487)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitSelectStatement(BaseSqmToSqlAstConverter.java:414)
    at org.hibernate.query.sqm.tree.select.SqmSelectStatement.accept(SqmSelectStatement.java:199)
    at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.translate(BaseSqmToSqlAstConverter.java:709)
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.buildCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:350)
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:270)
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:246)
    at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:537)
    at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:363)
    at org.hibernate.query.sqm.internal.QuerySqmImpl.list(QuerySqmImpl.java:987)
    at ru.sokolovda.dao.RaceDAO.findShipLastRaceWithShipModel(RaceDAO.java:49)
    at ru.sokolovda.services.RaceService.findLastShipRaceWithShipModel(RaceService.java:20)
    at ru.sokolovda.Main.main(Main.java:34)
Не могу понять, что во что пытается скастовать Hibernate, и почему у него это не получается. Прошу помочь в решении проблемы (может что-то не так реализовано в классах моделей, из-за чего не работает приведение типов)!

Main класс:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package ru.sokolovda;
 
import ru.sokolovda.models.Race;
import ru.sokolovda.models.Ship;
import ru.sokolovda.services.RaceService;
import ru.sokolovda.services.ShipService;
 
import java.io.InputStream;
import java.util.Date;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        // Создаём корабль
        String shipCharacteristics = readFileToString("Characteristics.json");
        Ship ship = new Ship("Pobeda", "крейсер", "Сочи", "1989", shipCharacteristics);
        ShipService shipService = new ShipService();
        shipService.saveShip(ship);
 
        // Создаем рейс
        Date startDate = new Date();
        Date arrivalDate = new Date();
        Race race = new Race(ship, startDate, arrivalDate, "Sochi", "Helsinki");
        RaceService raceService = new RaceService();
        raceService.saveRace(race);
 
        // Получаем последний рейс по названию корабля, а также модель этого корабля
        Race pobedaLastRace = raceService.findLastShipRaceWithShipModel("Pobeda");
        System.out.println(pobedaLastRace.getRacePK().getShip().getModel());
    }
Race:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package ru.sokolovda.models;
 
import jakarta.persistence.*;
import lombok.*;
 
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
 
@Entity
@Table(name = "races")
@NoArgsConstructor
@Getter
@Setter
public class Race implements Serializable {
    @EmbeddedId
    private RacePK racePK;
 
    @Column(name = "source")
    private String source;
 
    @Column(name = "destination")
    private String destination;
 
    public Race(Ship shipName, Date startDate, Date arrivalDate, String source, String destination) {
        this.source = source;
        this.destination = destination;
        this.racePK = new RacePK(shipName, startDate, arrivalDate);
    }
 
    // Только для практики. На деле, для уникальности достаточно поля id
    @Embeddable
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public static class RacePK implements Serializable {
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "ship_name")
        private Ship ship;
        @Column(name = "start_date")
        @Temporal(TemporalType.TIMESTAMP)
        private Date startDate;
        @Column(name = "arrival_date")
        @Temporal(TemporalType.TIMESTAMP)
        private Date arrivalDate;
 
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            RacePK racePK = (RacePK) o;
            return Objects.equals(ship, racePK.ship) && Objects.equals(startDate, racePK.startDate) && Objects.equals(arrivalDate, racePK.arrivalDate);
        }
 
        @Override
        public int hashCode() {
            return Objects.hash(ship, startDate, arrivalDate);
        }
    }
}
Ship
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package ru.sokolovda.models;
 
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
 
import java.util.List;
 
@Entity
@Table(name = "ships")
@NoArgsConstructor
@Getter
public class Ship {
 
    @Id
    @Column(name = "title", nullable = false)
    private String title;
 
    @Column(name = "model", nullable = false)
    private String model;
 
    @Column(name = "dock", nullable = false)
    private String dock;
 
    @Column(name = "creation_year", nullable = false)
    private String creationYear;
 
    // Данная аннотация работает только с версии Hibernate 6
    @JdbcTypeCode(SqlTypes.JSON)
    @Column(name = "characteristics", nullable = false)
    private ShipCharacteristics characteristicsJson;
 
    @OneToMany(mappedBy = "racePK.ship", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Race> races;
 
    public Ship(String title, String model, String dock, String creationYear) {
        this.title = title;
        this.model = model;
        this.dock = dock;
        this.creationYear = creationYear;
    }
 
    public Ship(String title, String model, String dock, String creationYear, String characteristicsJson) {
        this.title = title;
        this.model = model;
        this.dock = dock;
        this.creationYear = creationYear;
        this.characteristicsJson = characteristicsToPOJO(characteristicsJson);
    }
 
    public ShipCharacteristics characteristicsToPOJO(String characteristicsJson) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.readValue(characteristicsJson, ShipCharacteristics.class);
        } catch(JsonProcessingException ex) {
            System.out.println(ex.getMessage());
            return new ShipCharacteristics();
        }
    }
}
RaceDAO
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package ru.sokolovda.dao;
 
import ...
 
public class RaceDAO {
    // Выводит информацию о последнем рейсе данного корабля (по его названию), с названием модели корабля
    public Race findShipLastRaceWithShipModel(String shipName) {
        Session session = HibernateSessionFactory.getSessionFactory().openSession();
        String query = "from Race as r join fetch r.racePK.ship where r.racePK.ship = '" + shipName + "'";
        // По идее, ошибка возникает тут, при проваливании в метод list()
        List races = session.createQuery(query).list();
        Object[] row = (Object[])races.get(0);
        Race race = (Race)row[0];
        Ship ship = (Ship)row[1];
        session.close();
        return race;
    }
 
    // CRUD methods ...
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2022, 00:17
Ответы с готовыми решениями:

Ненормальный org.hibernate.MappingException в Хибернейте
Всем привет! Кто сталкивался с такой проблемой? Пишу свое маленькое приложение, в качестве бд использую Постгрес, в качестре орма -...

Unable to load class [hibernate]
не видит класс юзера вот такое дерево проекта: вот конфиг хибернейта: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; ...

Ошибка org.hibernate.property.access.spi.PropertyAccessException: Error accessing field
Не понимаю в чем ошибка. Идея в том что бы просто что бы взаимодействовать с базой данных. JAVA+BootSpring+hibernate+PostGreSQL ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.10.2022, 00:17
Помогаю со студенческими работами здесь

Hibernate (Mapping not found)
Помогите, ругается на то что нету файла, хотя вот он, лежит рядом...

Hibernate mapping role enum
class User { @Id Long id; String username; String password; Set&lt;Role&gt; roles; // ...getters and setters

<property name="dialect">org.hibernate.dialect.MySQLDialect</property> выдает ошибку
Почему он может выдавать ошибку, вроде все нужные jar файлы подключил, подскажите

Hibernate org.hibernate.HibernateException: Wrong column type
В модели было поле weight с типом double. Поменял на Integer и соответственно поменял в БД (postgresql) private Integer weight; ...

Hibernate Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
Доброго времени суток. Сталкиваюсь со всякими ошибками при добавлении данных в свою mysql бд. Вот код ошибки Exception in thread...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru