Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: Базы данных
Войти
Регистрация
Восстановить пароль
 
AnastasiyaSPSTU
0 / 0 / 0
Регистрация: 23.08.2016
Сообщений: 41
1

Hibernate + MySQL

28.08.2018, 11:16. Просмотров 80. Ответов 3
Метки нет (Все метки)

Есть база:
instructor связан с certificate как one-to-many по полю instr_id.
БАЗА заполнена, не пустая.

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- I N S T R U C T O R
create table if not exists instructor (
    instr_id int primary key auto_increment,
    first_name varchar(30) not null,
    second_name varchar(50),
    age int,
    phone varchar(15)
);  
 
-- C E R T I F I C A T E
create table if not exists certificate (
    certif_id int primary key auto_increment,
    number varchar(10) not null unique,
    degree varchar(7) not null,
    date_pass date,
    instr_id int not null,
    foreign key (instr_id) references instructor(instr_id)
);
domain Instructor:


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
@Entity
@Table(name = "instructor")
public class Instructor {
 
    @Id
    @Column(name = "instr_id")
    private int instructorId;
 
    @Column(name = "first_name", nullable = false, length = 30)
    private String firstName;
 
    @Column(name = "second_name", length = 50)
    private String secondName;
 
    @Column
    private byte age;
 
    @Column(length = 15)
    private String phone;
 
    @OneToMany(mappedBy = "instructor")
    private Set<Certificate> certificateSet;
 
    ....
   /// внизу конструкторы, сеттеры и геттеры
 
}
domain Certificate:

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
@Entity
@Table(name = "certificate")
public class Certificate {
    @Id
    @Column(name = "certif_id")
    private int certificateId;
 
    @Column(nullable = false, unique = true)
    private String number;
 
    @Column(length = 7)
    private String degree;
 
    @Column(name = "date_complete")
    private GregorianCalendar dateCompletion;
 
    @OneToMany
    @JoinColumn(name = "certif_id")
    private Instructor instructor;
 
    ....
   /// внизу конструкторы, сеттеры и геттеры
 
}
Делаю dao:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class InstructorDAOImpl implements InstructorDAO {
    private final SessionFactory sessionFactory;
 
    public InstructorDAOImpl(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
 
    @Override
    public List<Instructor> getAll() {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
 
    // domain.Instructor - инструктор лежит в папке domain 
        List<Instructor> instructors = session
                .createQuery("from domain.Instructor")
                .list();
 
        transaction.commit();
        session.close();
 
        return instructors;
    }
}
Тестовый метод - хочу достать всех instructors:

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
public class Application {
    public static void main(String[] args) {
        Configuration configuration = new Configuration();
        configuration
                .configure("hibernate.cfg.xml")
                .addAnnotatedClass(Instructor.class)
                .addAnnotatedClass(Certificate.class);
        System.out.println("Hibernate Configuration loaded");
 
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties()).build();
        System.out.println("Hibernate Annotation serviceRegistry created");
 
        SessionFactory sessionFactory
                = configuration.buildSessionFactory(serviceRegistry);
 
        InstructorDAO instructorDAO = new InstructorDAOImpl(sessionFactory);
 
        List<Instructor> instructors = instructorDAO.getAll();
 
        for (Instructor instructor : instructors) {
            System.out.println(instructor.toString());
        }
 
        sessionFactory.close();
    }
}
Файл конфигурации (hibernate.cfg.xml):

XML
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
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL57Dialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">
            jdbc:mysql://localhost:3306/kuznecov_dojo?serverTimezone=UTC&amp;useSSL=false
        </property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <!-- create, create-drop, update, validate -->
        <property name="hibernate.hbm2ddl.auto">update</property>
 
        <mapping class="domain.Instructor"/>
        <mapping class="domain.Certificate"/>
        <mapping class="domain.SportClub" />
 
    </session-factory>
</hibernate-configuration>

ПРОБЛЕМА в методе getALL().

Java
1
2
3
List<Instructor> instructors = session
                .createQuery("from domain.Instructor")
                .list();
После instructors.size == 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2018, 11:16
Ответы с готовыми решениями:

Java+MySQL+Spring+Hibernate tutorials
Добрый день, уважаемое сообщество программистов. Я новичок в Java. Сейчас есть необходимость...

Проверка на уникальность логина - MySql, Hibernate
У меня в базе данных есть таблица users с полями id, login, password. Поле login в таблице...

Hibernate
Привет кодеры! У меня несколько вопросов имеются. 1) У entityManager есть методы: сохранения...

Hibernate
Начал изучать Hibernate. Создал небольшой проект. С следующим содержанием. pom.xml &lt;project...

hibernate
Здравтсвуйте, не могу понять как этот вопрос задать googl'у. Допустим, есть таблица в которой...

3
iSmokeJC
Модератор
924 / 762 / 376
Регистрация: 21.10.2017
Сообщений: 2,584
28.08.2018, 22:44 2
Если не ошибаюсь, вот здесь
Цитата Сообщение от AnastasiyaSPSTU Посмотреть сообщение
from domain.Instructor
пакет не нужно указывать, только класс
0
snajper_ro
108 / 93 / 51
Регистрация: 14.09.2011
Сообщений: 589
Записей в блоге: 1
29.08.2018, 11:53 3
иногда бывает что надо, я правда не копался почему, до сих пор тайной осталось
0)упростите вашу задачу к самому простому, это единтсвенный способ решать любую задачу очень быстро и самостоятельно,
то есть двигаться от абсолютно корректного кода к проблемным местам
1)точно оно пишет туда, куда надо
2)попробуйте insert
0
AnastasiyaSPSTU
0 / 0 / 0
Регистрация: 23.08.2016
Сообщений: 41
29.08.2018, 11:56  [ТС] 4
Пакет в моем случае указывать надо было. Проблема решена путем исключения из hibernate.cfg.xml:
XML
1
2
        <mapping class="domain.Instructor"/>
        <mapping class="domain.Certificate"/>
А также добавления к configuration
Java
1
2
              .addAnnotatedClass(Instructor.class)
              .addAnnotatedClass(Certificate.class);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2018, 11:56

Hibernate, констрейнты
Здравствуйте, у меня вопрос, как поставить констрейнты на определённые поля класса сущности,...

Hibernate - маппинг
Добрый день. Есть таблица CREATE TABLE `role` ( `id` int auto_increment NOT NULL, `name`...

Установка Hibernate
Ребята, доброго времени суток! Новичок, пишу код в среде разработки IDEA Community. Появился...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru