Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242

EntityManager persist

16.10.2016, 21:10. Показов 1101. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрового времени суток, господа.
У меня есть следующие два Entity:
Theme

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
65
66
67
68
69
70
71
@Entity
@Table(name = "theme")
@NamedQuery(name = "theme.GetAll", query = "select p from Theme p")
public class Theme {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name = "text", length = 100)
    private String text;
    @OneToMany(targetEntity = News.class, mappedBy = "theme")
    private List<News> newsList;
 
    public Theme() {
    }
 
    public Theme(String text, List<News> newsList) {
        this.text = text;
        this.newsList = newsList;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getText() {
        return text;
    }
 
    public void setText(String text) {
        this.text = text;
    }
 
    public List<News> getNewsList() {
        return newsList;
    }
 
    public void setNewsList(List<News> newsList) {
        this.newsList = newsList;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
 
        Theme theme = (Theme) o;
 
        if (id != theme.id) return false;
        return text.equals(theme.text);
 
    }
 
    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + text.hashCode();
        return result;
    }
 
    @Override
    public String toString() {
        return "Theme{" +
                "id=" + id +
                ", text='" + text + '\'' +
                '}';
    }
}

News

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
@Entity
@Table(name = "news")
@NamedQueries({
        @NamedQuery(name = "news.GetAllNews", query = "select p from News p"),
})
 
public class News {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name = "shortTitle", length = 230)
    private String shortTitle;
    @Column(name = "mainTitle", length = 30)
    private String mainTitle;
    @Column(name = "newsText")
    private String newsText;
    @Column(name = "publishDate")
    private Date publishDate;
    @Column(name = "mainPhoto")
    private byte[] mainPhoto;
 
    @ManyToOne
    private Theme theme;
 
    public News() {
    }
 
    public News(String shortTitle, String mainTitle, String newsText, Date publishDate, byte[] mainPhoto) {
        this.shortTitle = shortTitle;
        this.mainTitle = mainTitle;
        this.newsText = newsText;
        this.publishDate = publishDate;
        this.mainPhoto = mainPhoto;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getShortTitle() {
        return shortTitle;
    }
 
    public void setShortTitle(String shortTitle) {
        this.shortTitle = shortTitle;
    }
 
    public String getMainTitle() {
        return mainTitle;
    }
 
    public void setMainTitle(String mainTitle) {
        this.mainTitle = mainTitle;
    }
 
    public String getNewsText() {
        return newsText;
    }
 
    public void setNewsText(String newsText) {
        this.newsText = newsText;
    }
 
    public Date getPublishDate() {
        return publishDate;
    }
 
    public void setPublishDate(Date publishDate) {
        this.publishDate = publishDate;
    }
 
    public byte[] getMainPhoto() {
        return mainPhoto;
    }
 
    public void setMainPhoto(byte[] mainPhoto) {
        this.mainPhoto = mainPhoto;
    }
 
    public Theme getTheme() {
        return theme;
    }
 
    public void setTheme(Theme theme) {
        this.theme = theme;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
 
        News news = (News) o;
 
        if (id != news.id) return false;
        if (!shortTitle.equals(news.shortTitle)) return false;
        if (!mainTitle.equals(news.mainTitle)) return false;
        if (!newsText.equals(news.newsText)) return false;
        if (!publishDate.equals(news.publishDate)) return false;
        if (!Arrays.equals(mainPhoto, news.mainPhoto)) return false;
        return theme.equals(news.theme);
 
    }
 
    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + shortTitle.hashCode();
        result = 31 * result + mainTitle.hashCode();
        result = 31 * result + newsText.hashCode();
        result = 31 * result + publishDate.hashCode();
        result = 31 * result + Arrays.hashCode(mainPhoto);
        result = 31 * result + theme.hashCode();
        return result;
    }
 
    @Override
    public String toString() {
        return "News{" +
                "shortTitle='" + shortTitle + '\'' +
                ", mainTitle='" + mainTitle + '\'' +
                ", newsText='" + newsText + '\'' +
                '}';
    }
}

Есть след набор данных:
Данные

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <theme id="1" text="Sea"/>
    <theme id="2" text="Space"/>
    <theme id="3" text="Art"/>
    <theme id="4" text="Party"/>
    <theme id="5" text="House"/>
    <theme id="6" text="Economic"/>
 
    <news id="2" Theme_ID="1" shortTitle="New fish" mainTitle="Scientists found new fish" newsText="Scientists find new fish and call it 'big fish'" publishDate="2015-02-09 00:00:00" mainPhoto=""/>
    <news id="3" Theme_ID="1" shortTitle="Lost ship" mainTitle="Scientists found lost ship" newsText="Scientists find lost ship with gold" publishDate="2015-02-05 00:00:0" mainPhoto="11010"/>
    <news id="1" Theme_ID="1" shortTitle="New fish" mainTitle="Scientists found new fish" newsText="Scientists find new fish and call it 'small fish'" publishDate="2015-02-07 00:00:00" mainPhoto=""/>
    <news id="4" Theme_ID="2" shortTitle="Newcomer" mainTitle="Scientists found newcomers" newsText="Newcomers were found by scientists" publishDate="2015-02-02 00:00:00" mainPhoto=""/>
    <news id="5" Theme_ID="3" shortTitle="New picture" mainTitle="Scientists found new picture" newsText="Scientists found Da Vinchi's picture" publishDate="2015-02-05 00:00:00" mainPhoto=""/>
    <news id="6" Theme_ID="3" shortTitle="New picture" mainTitle="Scientists found new picture" newsText="Scientists found Da Vinchi's picture" publishDate="2015-02-07 00:00:00" mainPhoto=""/>
</dataset>

И есть след метод для теста:
тест

Java
1
2
3
4
5
6
7
8
9
    @Test
    public void testInsertTheme() throws Exception{
        em.getTransaction().begin();
        Theme theme = new Theme("test", null);
        em.persist(theme);
        em.getTransaction().commit();
        List<Theme> list = em.createNativeQuery("select * from theme", Theme.class).getResultList();
        assertEquals(7, list.size());
    }


Собственно с выборкой данных проблем нет никаких, но вот когда я пытаюсь вставить какие-то данные, то ловлю след ошибку:
ошибка

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: Theme


Подскажите плз, что я делаю не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2016, 21:10
Ответы с готовыми решениями:

JPA EntityManager.persist : получить id добавленной записи
У меня в jpa проекте (поставщик hibernate) есть некая сущность в которой id установлено автоматически генерируемым @Id ...

Не могу создать EntityManager
Дали задание реализовать бд с помощью hibernate jpa. pom.xml : &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;project...

Hibernate EntityManager без транзакций
Здравствуйте! Работаю с EntityManager em = entityManagerFactory.createEntityManager(); и ничего на update не выполняется без транзакций....

2
59 / 59 / 20
Регистрация: 21.03.2013
Сообщений: 186
16.10.2016, 23:59
Скорее всего, вы пытаетесь вызвать метод persist на уже существующем в БД объекте.

Т.е. когда вы делаете так:
Java
1
2
Theme theme = new Theme("test", null);
em.persist(theme);
Вы сохраняете НОВЫЙ объект в БД.

Если же вы взяли каким-то образом объект theme из базы и пытаетесь сделать persist на нем - получите ошибку.
Для таких целей есть:
Java
1
em.merge(theme);
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
17.10.2016, 00:30  [ТС]
Virkom, так мне и надо добавить новый элемент в БД, собственно исходя из данных видно, что такого элемента в базе нету, но есть некоторые исходные данные, собственно проблема именно в том, что к этим исходным данным я не могу добавить новый, т.к. в пустой набор данных элемент добавляется без проблем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2016, 00:30
Помогаю со студенческими работами здесь

Hibernate : EntityManager и EntityManagerFactory (есть ли стандартные реализации ?)
В сгенерированном коде у меня всё завязано на EntityManager, который сразу видно рассчитывает на внедрение со спрингом ... но это допустим...

Влияет ли на быстродействие EntityManager количество классов сущностей в persistence-unit
Влияет ли на быстродействие EntityManager количество классов сущностей в persistence-unit? (Не инициализации, а уже при работе с данными).

Persist и merge
Ребята help. Помогите плз сделать без запросов в hibernate, а с помощью merge, persist. Добавлено через 2 минуты Вот взять выбрать...

JPA problem with persist()
Добрый день! Извините за название темы - на русском в упор отказывалось сохранятся. Второй день бъюсь с ошибкой. Помогите,...

Не деплоится простейший @Singleton @Startup с persist(.) в @PostConstruct
Используются GlassFish и Java DB, все в духе JavaEE tutorial Сервер Java DB запущен. База данных создана. Через соединение на закладке...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru