Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
asus
89 / 89 / 20
Регистрация: 19.02.2010
Сообщений: 966
1

Как работает spring data?

05.02.2017, 15:00. Просмотров 278. Ответов 10
Метки нет (Все метки)

Здравствуйте всем!
сразу в суть, начал разбираться со Спринг бут. вот весь проект
index.jsp
Кликните здесь для просмотра всего текста
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
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires">
    <title>Boot Sample | Home</title>
 
    <link href="../../static/css/bootstrap.min.css" rel="stylesheet">
    <link href="../../static/css/style.css" rel="stylesheet">
 
    <!--[if it IE9]>
    <script src="../../static/js/html5shiv.js"></script>
    <script src="../../static/js/respond.js"></script>
    <![endif]-->
</head>
<body>
 
<div role="navigation">
    <div class="navbar navbar-inverse">
        <a href="#" class="navbar-brand">Bootsample</a>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="new-task">New Task</a></li>
                <li><a href="all-tasks">All Tasks</a></li>
            </ul>
        </div>
    </div>
</div>
<c:choose>
    <c:when test="${mode=='MODE_HOME'}">
        <div class="container" id="homeDiv">
            <div class="jumbotron text-center">
                <h1>Welcome to task manager</h1>
            </div>
        </div>
    </c:when>
    <c:when test="${mode=='MODE_TASKS'}">
        <div class="container text-center" id="tasksDiv">
            <h3>My tasks</h3>
            <hr/>
            <div class="table-responsive">
                <table class="table table-striped table-bordered text-left">
                    <thead>
                    <tr>
                        <th>ID</th>
                        <th>Name</th>
                        <th>Description</th>
                        <th>Date Created</th>
                        <th>Finished</th>
                        <th></th>
                        <th></th>
                    </tr>
                    </thead>
                    <tbody>
                    <c:forEach var="task" items="${tasks}">
                        <tr>
                            <td>${task.id}</td>
                            <td>${task.name}</td>
                            <td>${task.description}</td>
                            <td><fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${task.dateCreated}"/></td>
                            <td>${task.finished}</td>
                            <td><a href="update-task?id=${task.id}"><span class="glyphicon glyphicon-pencil"></span> </a> </td>
                            <td><a href="delete-task?id=${task.id}"><span class="glyphicon glyphicon-trash"></span> </a> </td>
                        </tr>
                    </c:forEach>
                    </tbody>
                </table>
            </div>
        </div>
    </c:when>
    <c:when test="${mode=='MODE_NEW' || mode=='MODE_UPDATE'}">
        <div class="container text-center">
            <h3>Manage Task</h3>
            <hr/>
            <form class="form-horizontal" method="post" action="save-task">
                <input type="hidden" name="id" value="${task.id}"/>
                <div class="form-group">
                    <label class="control-label col-md-3">Name</label>
                    <div class="col-md-7">
                        <input type="text" class="form-control" name="name" value="${task.name}"/>
                    </div>
                </div>
                <div class="form-group">
                    <label class="control-label col-md-3">Description</label>
                    <div class="col-md-7">
                        <input type="text" class="form-control" name="description" value="${task.description}"/>
                    </div>
                </div>
                <div class="form-group">
                    <label class="control-label col-md-3">Finished</label>
                    <div class="col-md-7">
                        <input type="radio" class="col-sm-1" name="finished" value="true"/>
                        <div class="col-sm-1">Yes</div>
                        <input type="radio" class="col-sm-1" name="finished" value="false"/>
                        <div class="col-sm-1">No</div>
                    </div>
                </div>
                <div class="form-group">
                    <input type="submit" class="btn btn-primary" value="Save"/>
                </div>
            </form>
        </div>
    </c:when>
</c:choose>
 
 
<script src="../../static/js/jquery-3.1.1.min.js"></script>
<script src="../../static/js/bootstrap.min.js"></script>
</body>
</html>



Model Task.java
Кликните здесь для просмотра всего текста
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
package bootsample.model;
 
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
 
/**
 * Created by Muzaffar on 06.01.2017.
 */
@Entity(name = "t_tasks")
public class Task implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private String description;
    @Temporal(TemporalType.TIMESTAMP)
    private Date dateCreated;
    private boolean finished;
 
    public Task(){}
    public Task(String name, String description, Date dateCreated, boolean finished) {
        this.name = name;
        this.description = description;
        this.dateCreated = dateCreated;
        this.finished = finished;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public Date getDateCreated() {
        return dateCreated;
    }
 
    public void setDateCreated(Date dateCreated) {
        this.dateCreated = dateCreated;
    }
 
    public boolean isFinished() {
        return finished;
    }
 
    public void setFinished(boolean finished) {
        this.finished = finished;
    }
 
    @Override
    public String toString() {
        return "Task{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                ", dateCreated=" + dateCreated +
                ", finished=" + finished +
                '}';
    }
}



Controller
MainController.java
Кликните здесь для просмотра всего текста
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
package bootsample.controller;
 
import bootsample.model.Task;
import bootsample.service.TaskService;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
import java.util.Date;
 
/**
 * Created by Muzaffar on 06.01.2017.
 */
@Controller
public class MainController {
    @Autowired
    private TaskService taskService;
 
    @GetMapping("/")
    public String home(HttpServletRequest request) {
        request.setAttribute("mode", "MODE_HOME");
        return "index";
    }
 
    @GetMapping("/all-tasks")
    public String allTasks(HttpServletRequest request) {
        request.setAttribute("tasks", taskService.findAll());
        request.setAttribute("mode", "MODE_TASKS");
        return "index";
    }
 
    @GetMapping("/new-task")
    public String newTask(HttpServletRequest request) {
        request.setAttribute("mode", "MODE_NEW");
        return "index";
    }
 
    @PostMapping("/save-task")
    public String saveTask(@ModelAttribute Task task, BindingResult bindingResult, HttpServletRequest request) {
        task.setDateCreated(new Date());
        taskService.save(task);
        request.setAttribute("tasks", taskService.findAll());
        request.setAttribute("mode", "MODE_TASKS");
        return "index";
    }
    @GetMapping("/update-task")
    public String updateTask(@RequestParam int id, HttpServletRequest request) {
        request.setAttribute("task", taskService.findTask(id));
        request.setAttribute("mode", "MODE_UPDATE");
        return "index";
    }
 
    @GetMapping("/delete-task")
    public String deleteTask(@RequestParam int id, HttpServletRequest request) {
        taskService.delete(id);
        request.setAttribute("tasks", taskService.findAll());
        request.setAttribute("mode", "MODE_TASKS");
        return "index";
    }
}



DAO
TaskRepository.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
package bootsample.dao;
 
import bootsample.model.Task;
import org.springframework.data.repository.CrudRepository;
 
/**
 * Created by Muzaffar on 07.01.2017.
 */
public interface TaskRepository extends CrudRepository<Task, Integer> {
 
}



Service
TaskService.java
Кликните здесь для просмотра всего текста
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
package bootsample.service;
 
import bootsample.dao.TaskRepository;
import bootsample.model.Task;
import org.springframework.stereotype.Service;
 
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
 
/**
 * Created by Muzaffar on 07.01.2017.
 */
@Service
@Transactional
public class TaskService {
    private final TaskRepository taskRepository;
 
    public TaskService(TaskRepository taskRepository) {
        this.taskRepository = taskRepository;
    }
 
    public List<Task> findAll() {
        List<Task> tasks = new ArrayList<>();
        for (Task task : taskRepository.findAll()) {
            tasks.add(task);
        }
        return tasks;
    }
 
    public void save(Task task) {
        taskRepository.save(task);
    }
 
    public void delete(int id) {
        taskRepository.delete(id);
    }
 
    public Task findTask(int id) {
        return taskRepository.findOne(id);
    }
}


так вот как тут происходит операции CRUD? даже нет именованных запросов как в EJB
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2017, 15:00
Ответы с готовыми решениями:

[Spring Data] Не работает кастомная Query
Ошибка: org.springframework.beans.factory.BeanCreationException: Error...

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven....

Spring Data Solr
Пытаюсь запилить на Spring MVC проект Spring Data Solr(на моем проекте также...

Spring Data + Transactional
Добрового времени суток, пишу тесты к дао. public interface RailwayTicketDao...

Spring Data + Vaadin
Добрый день! Подскажите, плиз, пример кода со связными таблицами с...

10
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,741
05.02.2017, 15:15 2
Цитата Сообщение от asus Посмотреть сообщение
так вот как тут происходит операции CRUD? даже нет именованных запросов как в EJB
У вас есть интерфейс TaskRepository extends CrudRepository<Task, Integer>
Когда поднимается контекст спринга, спринг генерирует код класса, который имплементирует этот интерфейс. В этом классе спринг генерирует код, который обеспечивает доступ к БД (hql который затем транслируется в запросы БД)
0
asus
89 / 89 / 20
Регистрация: 19.02.2010
Сообщений: 966
05.02.2017, 15:25  [ТС] 3
все равно не совсем понятно до пустим в EJB мы с запросами управляли сами и ещё там была проблема который решается очень быстро это проблема 1-N, а в Спринге такой проблемы нет чтоли?
и ещё там многие IDE позволяли создавать Entities прямо из базы а тут?

З.Ы. прошу прошение за такие нубские вопросы...

Добавлено через 2 минуты
и ещё в классе CrudRepository.java нет явного запроса
Кликните здесь для просмотра всего текста
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
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
 
package org.springframework.data.repository;
 
import java.io.Serializable;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.Repository;
 
@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <S extends T> S save(S var1);
 
    <S extends T> Iterable<S> save(Iterable<S> var1);
 
    T findOne(ID var1);
 
    boolean exists(ID var1);
 
    Iterable<T> findAll();
 
    Iterable<T> findAll(Iterable<ID> var1);
 
    long count();
 
    void delete(ID var1);
 
    void delete(T var1);
 
    void delete(Iterable<? extends T> var1);
 
    void deleteAll();
}
0
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,741
05.02.2017, 15:30 4
Цитата Сообщение от asus Посмотреть сообщение
все равно не совсем понятно до пустим в EJB мы с запросами управляли сами
при надобности и тут можете управлять. Что вы понимаете под "управлять"?

Цитата Сообщение от asus Посмотреть сообщение
и ещё в классе CrudRepository.java нет явного запроса
это интерфейс. Не удивительно что тут запроса нет. Запрос будет виден (полагаю) в реализации.
0
asus
89 / 89 / 20
Регистрация: 19.02.2010
Сообщений: 966
05.02.2017, 15:40  [ТС] 5
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
при надобности и тут можете управлять. Что вы понимаете под "управлять"?
вот код из другого тестового проекта где используется EJB
UserSpr.java
Кликните здесь для просмотра всего текста
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package entity;
 
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
 
/**
 *
 * @author Музаффар
 */
@Entity
@Table(name = "users_spr")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "UsersSpr.findAll", query = "SELECT u FROM UsersSpr u")
    , @NamedQuery(name = "UsersSpr.findById", query = "SELECT u FROM UsersSpr u WHERE u.id = :id")
    , @NamedQuery(name = "UsersSpr.findByFirstName", query = "SELECT u FROM UsersSpr u WHERE u.firstName = :firstName")
    , @NamedQuery(name = "UsersSpr.findByLastName", query = "SELECT u FROM UsersSpr u WHERE u.lastName = :lastName")
    , @NamedQuery(name = "UsersSpr.findByLogin", query = "SELECT u FROM UsersSpr u WHERE u.login = :login")
    , @NamedQuery(name = "UsersSpr.findByPassword", query = "SELECT u FROM UsersSpr u WHERE u.password = :password")})
public class UsersSpr implements Serializable {
 
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "first_name")
    private String firstName;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "last_name")
    private String lastName;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "login")
    private String login;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "password")
    private String password;
    @OneToMany(mappedBy = "idUser")
    private Collection<Partiya> partiyaCollection;
    @OneToMany(mappedBy = "idUser")
    private Collection<MaterialSklad> materialSkladCollection;
    @OneToMany(mappedBy = "idUser")
    private Collection<Otgruzka> otgruzkaCollection;
 
    public UsersSpr() {
    }
 
    public UsersSpr(Integer id) {
        this.id = id;
    }
 
    public UsersSpr(Integer id, String firstName, String lastName, String login, String password) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.login = login;
        this.password = password;
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
    public String getLogin() {
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    @XmlTransient
    public Collection<Partiya> getPartiyaCollection() {
        return partiyaCollection;
    }
 
    public void setPartiyaCollection(Collection<Partiya> partiyaCollection) {
        this.partiyaCollection = partiyaCollection;
    }
 
    @XmlTransient
    public Collection<MaterialSklad> getMaterialSkladCollection() {
        return materialSkladCollection;
    }
 
    public void setMaterialSkladCollection(Collection<MaterialSklad> materialSkladCollection) {
        this.materialSkladCollection = materialSkladCollection;
    }
 
    @XmlTransient
    public Collection<Otgruzka> getOtgruzkaCollection() {
        return otgruzkaCollection;
    }
 
    public void setOtgruzkaCollection(Collection<Otgruzka> otgruzkaCollection) {
        this.otgruzkaCollection = otgruzkaCollection;
    }
 
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }
 
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof UsersSpr)) {
            return false;
        }
        UsersSpr other = (UsersSpr) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }
 
    @Override
    public String toString() {
        return "entity.UsersSpr[ id=" + id + " ]";
    }
    
}


Кликните здесь для просмотра всего текста
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
....
@Override
    public <T> T persistEntity(T entity) {
        em.persist(entity);
        return entity;
    }
 
    @Override
    public <T> T mergeEntity(T entity) {
        return em.merge(entity);
    }
 
@Override
    public void removeUsersSpr(UsersSpr usersSpr) {
        usersSpr = em.find(UsersSpr.class, usersSpr.getId());
        em.remove(usersSpr);
    }
 
    @Override
    public UsersSpr getUserByLogPass(String login, String password) {
        try {
            return em.createNamedQuery("UsersSpr.findByLoginPassword", UsersSpr.class)
                    .setParameter(login, login).setParameter(password, password).getSingleResult();
        } catch (Exception e) {
            return null;
        }
 
    }
......


вот интерфес
Кликните здесь для просмотра всего текста
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
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;
 
import entity.UsersSpr;
import javax.ejb.Local;
 
/**
 *
 * @author Музаффар
 */
@Local
public interface SessionEJBLocal {
 
    Object queryByRange(String jpqlStmt, int firstResult, int maxResult);
 
    <T> T persistEntity(T entity);
 
    <T> T mergeEntity(T entity);
 
    void removeUsersSpr(UsersSpr usersSpr);
 
    UsersSpr getUserByLogPass(String login, String password);
}


дальше из сервлета/контроллера буду обращаться по интерфейсу

а тут как то не совсем понятны как все это устроено

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
это интерфейс.
да прошу прошение...
0
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,741
05.02.2017, 16:01 6
Цитата Сообщение от asus Посмотреть сообщение
а тут как то не совсем понятны как все это устроено
точно так же только ваши @NamedQuery можете сразу в TaskRepository писать, а можете даже их не писать, а использовать конвенцию имен


Например у вас есть @NamedQuery(name = "UsersSpr.findByFirstName", query = "SELECT u FROM UsersSpr u WHERE u.firstName = :firstName")
в вашем интерфейсе UserRepository вы можете написать List<User> findByFirstName(String firstName) и получите тоже самое. Меньше кода - больше пользы.
0
asus
89 / 89 / 20
Регистрация: 19.02.2010
Сообщений: 966
05.02.2017, 16:30  [ТС] 7
KEKCoGEN, ОК спасибо Вам, пойду дальше разбираться.
вот только слишком много аннотации...

Добавлено через 2 минуты
и кстати тут тоже есть проблема 1-N?
0
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,741
05.02.2017, 16:35 8
Цитата Сообщение от asus Посмотреть сообщение
и кстати тут тоже есть проблема 1-N?
вы о чем? Я незнаю что такое 1-N. Знаю что такое N+1. Вы об этом?
0
asus
89 / 89 / 20
Регистрация: 19.02.2010
Сообщений: 966
05.02.2017, 16:39  [ТС] 9
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Знаю что такое N+1. Вы об этом?
да, устал чтоли...
0
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,741
05.02.2017, 16:45 10
asus, непосредственно к спрингу это отношения не имеет. В JPA2.1 ввели EntityGraph который помогает решить эту проблему. В доке есть инфа по этому поводу.

А вообще проблема возникает при fetch.EAGER моде. Его вообще без особой причины лучше не использовать. Имхо больше проблем чем пользы.
0
asus
89 / 89 / 20
Регистрация: 19.02.2010
Сообщений: 966
05.02.2017, 16:50  [ТС] 11
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
А вообще проблема возникает при fetch.EAGER моде.
да.
0
05.02.2017, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2017, 16:50

Spring Boot + Security + Data
При поднятии сервера приложения в консоле выводит сообщение 19-Apr-2016...

QueryDSL и Spring Data JPA
Начал изучать querydsl. Делал по одному примеру. Там из такого запроса: ...

Инициализация объекта в JPQL запросе [Spring Data]
Есть класс StateArchiveDTO с полем Collection&lt;StatePropertyEntity&gt;...


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

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

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