Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57

Отношение многие ко многим(Теги к новостям)

02.07.2013, 16:56. Показов 2822. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, есть статьи, у каждой статьи - несколько тегов. У тега может быть несколько статей. Я знаю, как сделать выборку статей, но не знаю как сделать выборку тегов к статье. Пишу на Spring + hibernate. Я, вроде, настроил отношение многие ко многим через аннотации между тегами и статьями. Написал небольшой сервис, но я не знаю как вынуть. Не знаю как это реализовать в контроллере и на странице тоже. Что мне делать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2013, 16:56
Ответы с готовыми решениями:

Отношение Многие ко Многим
Добрый день, недавно начал осваивать Асп.нет, и хотелось бы реализовать связь многие ко многим. Делаю все согласно примером найденным в...

Отношение многие ко многим
Здравствуйте! Есть задача Есть две сущности АВТОРЫ и КНИГИ, связь М-М (многие к многим). Создайте структуру таблиц для этих сущностей и...

BindingSource и DataSet и отношение многие-ко-многим
в БД имеем: таблицу f, s и для отображения МкМ fs. две связи(Relations) f->fs и s->fs DataTable f = new DataTable("f");...

16
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.07.2013, 17:25
выложить код например. у меня, например, телепатических способностей к сожалению нет
0
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57
02.07.2013, 19:11  [ТС]
Контроллер:
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
package net.schastny.contactmanager.web;
 
import java.util.Map;
 
import net.schastny.contactmanager.domain.Contact;
import net.schastny.contactmanager.service.ContactService;
import net.schastny.contactmanager.domain.news.News;
import net.schastny.contactmanager.service.NewsService;
 
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public class ContactController {
 
    @Autowired
    private ContactService contactService;
    
    @Autowired
    private NewsService newsService;
 
    @RequestMapping("/index")
    public String listContacts(Map<String, Object> map) {
 
        map.put("contact", new Contact());
        map.put("contactList", contactService.listContact());
        map.put("news", new News());
        map.put("newsList", newsService.findAllWithDetail());
 
        return "contact";
    }
    
    @RequestMapping("/")
    public String home() {
        return "redirect:/index";
    }
 
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addContact(@ModelAttribute("contact") Contact contact,
            BindingResult result) {
 
        contactService.addContact(contact);
 
        return "redirect:/index";
    }
 
    @RequestMapping("/delete/{contactId}")
    public String deleteContact(@PathVariable("contactId") Integer contactId) {
 
        contactService.removeContact(contactId);
 
        return "redirect:/index";
    }
}

Дао:
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
package net.schastny.contactmanager.dao;
 
import java.util.List;
 
import net.schastny.contactmanager.domain.news.News;
 
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
@Repository
public class NewsDAOImpl implements NewsDAO {
 
    @Autowired
    private SessionFactory sessionFactory;
 
    @SuppressWarnings("unchecked")
    public List<News> listNews() {
 
        return sessionFactory.getCurrentSession().createQuery("from News")
            .list();
    }
    
    public List<News> findAllWithDetail() {
        return sessionFactory.getCurrentSession().getNamedQuery("News.findAllWithDetail").list();
    }
 
    
}

Домен:
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
package net.schastny.contactmanager.domain.news;
 
 
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
 
import net.schastny.contactmanager.domain.Tags;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
 
 
 
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
 
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
 
 
 
 
@Entity
@Table(name = "NEWS")
@NamedQueries({
    
    @NamedQuery(name="News.findAllWithDetail", 
                query="from News n join n.tags")
})
 
public class News implements Serializable {
 
    
    
    @Id
    @Column(name = "NEWS_ID")
    @GeneratedValue
    private Integer news_id;
    
    
 
    @Column(name = "TITLE")
    private String title;
 
    @Column(name = "CONTENT")
    private String content;
 
 
    public Integer getId() {
        return news_id;
    }
 
    public void setId(Integer news_id) {
        this.news_id = news_id;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getContent() {
        return content;
    }
 
    public void setContent(String content) {
        this.content = content;
    }
 
    
 
 
@ManyToMany
@JoinTable(name="NEWS_TAG", joinColumns=@JoinColumn(name="NEWS_ID"),inverseJoinColumns=@JoinColumn(name="TAG_ID"))
private Set<Tags> tags=new HashSet<Tags>();
 
public Set<Tags> getTags(){
    return this.tags;
}
public void setTags(Set<Tags> tags)
{
    this.tags=tags;
    }
 
    
}

На всякий случай повторю, что я хочу видеть список тегов к списку статей. Т.е. вот так:
Статья 1
Тег 1, Тег 2

Статья 2
Тег 1, Тег 3

Статья 3
Тег 1, Тег 2, Тег 3
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.07.2013, 19:32
по идее, если хибер работает так же как эклипс линк, а он по идее должен, если вы обратитесь к сету тэгов у ньюса - они там будут
0
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57
02.07.2013, 19:44  [ТС]
Ничего не понял
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.07.2013, 20:20
Java
1
2
3
newsDAO.listNews()/*получаем через дао лист новостей*/
.get(0)/*берем первую попавшуюся*/
.getTags();/*пытаемся достать из нее теги*/
если Hibernate работает как другая, мне знакомая, ОРМка - лениво подгрузятся теги соответствующие статье. попробуйте
0
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57
02.07.2013, 20:57  [ТС]
А как это вынуть на странице?
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.07.2013, 22:13
дайте страницу на которой вы выводите какую-то статью
0
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57
02.07.2013, 22:21  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<c:if test="${!empty newsList}">
    <table class="data">
 
        <c:forEach items="${newsList}" var="news">
            <tr>
                <td>${news.id}</td>
                <td>${news.title}</td>
                <td>${news.content}</td>
                
                
            </tr>
        </c:forEach>
    </table>
</c:if>
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.07.2013, 22:44
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<c:if test="${!empty newsList}">
    <table class="data">
 
        <c:forEach items="${newsList}" var="news">
            <tr>
                <td>${news.id}</td>
                <td>${news.title}</td>
                <td>${news.content}</td>
                <td>
                    <c:if test="${!empty news.tags}">
                        none
                    </c:if>
                    <c:if test="${!empty news.tags}">
                        <c:forEach items="${news.tags}" var="tag">
                            ${tag} <!--добавить нужное для вывода поле-->
                        </c:forEach>
                    </c:if>
                </td>
            </tr>
        </c:forEach>
    </table>
</c:if>
только мои ифы нужно поменять на свичкейс, я не помню синтаксиса(
0
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57
02.07.2013, 23:05  [ТС]
Жалуется на 14 строчку.

Скорее всего, я плохо вынимаю.
Вот дао:
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
package net.schastny.contactmanager.dao;
 
import java.util.List;
 
import net.schastny.contactmanager.domain.Tags;
import net.schastny.contactmanager.domain.news.News;
 
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
@Repository
public class NewsDAOImpl implements NewsDAO {
 
    @Autowired
    private SessionFactory sessionFactory;
 
    @SuppressWarnings("unchecked")
    public List<News> listNews() {
 
        return sessionFactory.getCurrentSession().createQuery("from News")
            .list();
    }
    
    public List<News> findAllWithDetail() {
         List<News> news = (List<News>) sessionFactory.getCurrentSession().createQuery("from News").list();
                for(News i : news) {
                  List<Tags> tags = i.getTags();
                }
    return  news;
    }
 
    
}
Вот часть контроллера:
Java
1
2
3
4
5
6
7
8
9
10
@RequestMapping("/index")
    public String listContacts(Map<String, Object> map) {
 
        map.put("contact", new Contact());
        map.put("contactList", contactService.listContact());
        map.put("news", new News());
        map.put("newsList", newsService.findAllWithDetail());
 
        return "contact";
    }
Stacktrace:
org.apache.jasper.servlet.JspServletWrap per.handleJspException(JspServletWrapper .java:568)
org.apache.jasper.servlet.JspServletWrap per.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.ser viceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.ser vice(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(H ttpServlet.java:728)
org.springframework.web.servlet.view.Int ernalResourceView.renderMergedOutputMode l(InternalResourceView.java:238)
org.springframework.web.servlet.view.Abs tractView.render(AbstractView.java:250)
org.springframework.web.servlet.Dispatch erServlet.render(DispatcherServlet.java: 1047)
org.springframework.web.servlet.Dispatch erServlet.doDispatch(DispatcherServlet.j ava:817)
org.springframework.web.servlet.Dispatch erServlet.doService(DispatcherServlet.ja va:719)
org.springframework.web.servlet.Framewor kServlet.processRequest(FrameworkServlet .java:644)
org.springframework.web.servlet.Framewor kServlet.doGet(FrameworkServlet.java:549 )
javax.servlet.http.HttpServlet.service(H ttpServlet.java:621)
javax.servlet.http.HttpServlet.service(H ttpServlet.java:728)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:368)
org.springframework.security.web.access. intercept.FilterSecurityInterceptor.invo ke(FilterSecurityInterceptor.java:109)
org.springframework.security.web.access. intercept.FilterSecurityInterceptor.doFi lter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.access. ExceptionTranslationFilter.doFilter(Exce ptionTranslationFilter.java:97)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.session .SessionManagementFilter.doFilter(Sessio nManagementFilter.java:100)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.AnonymousAuthenticationFilter.do Filter(AnonymousAuthenticationFilter.jav a:78)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.rememberme.RememberMeAuthenticat ionFilter.doFilter(RememberMeAuthenticat ionFilter.java:112)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.servlet api.SecurityContextHolderAwareRequestFil ter.doFilter(SecurityContextHolderAwareR equestFilter.java:54)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.savedre quest.RequestCacheAwareFilter.doFilter(R equestCacheAwareFilter.java:35)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.AbstractAuthenticationProcessing Filter.doFilter(AbstractAuthenticationPr ocessingFilter.java:187)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.logout.LogoutFilter.doFilter(Log outFilter.java:105)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.context .SecurityContextPersistenceFilter.doFilt er(SecurityContextPersistenceFilter.java :79)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.FilterC hainProxy.doFilter(FilterChainProxy.java :169)
org.springframework.web.filter.Delegatin gFilterProxy.invokeDelegate(DelegatingFi lterProxy.java:237)
org.springframework.web.filter.Delegatin gFilterProxy.doFilter(DelegatingFilterPr oxy.java:167)
org.springframework.web.filter.Character EncodingFilter.doFilterInternal(Characte rEncodingFilter.java:88)
org.springframework.web.filter.OncePerRe questFilter.doFilter(OncePerRequestFilte r.java:76)


root cause

org.hibernate.LazyInitializationExceptio n: failed to lazily initialize a collection of role: net.schastny.contactmanager.domain.news. News.tags, no session or session was closed
org.hibernate.collection.AbstractPersist entCollection.throwLazyInitializationExc eption(AbstractPersistentCollection.java :358)
org.hibernate.collection.AbstractPersist entCollection.throwLazyInitializationExc eptionIfNotConnected(AbstractPersistentC ollection.java:350)
org.hibernate.collection.AbstractPersist entCollection.readSize(AbstractPersisten tCollection.java:97)
org.hibernate.collection.PersistentBag.i sEmpty(PersistentBag.java:232)
org.apache.el.parser.AstEmpty.getValue(A stEmpty.java:55)
org.apache.el.parser.AstNot.getValue(Ast Not.java:44)
org.apache.el.ValueExpressionImpl.getVal ue(ValueExpressionImpl.java:185)
org.apache.jasper.runtime.PageContextImp l.proprietaryEvaluate(PageContextImpl.ja va:1026)
org.apache.jsp.WEB_002dINF.views.contact _jsp._jspx_meth_c_005fif_005f2(contact_j sp.java:1093)
org.apache.jsp.WEB_002dINF.views.contact _jsp._jspx_meth_c_005fforEach_005f1(cont act_jsp.java:1059)
org.apache.jsp.WEB_002dINF.views.contact _jsp._jspx_meth_c_005fif_005f1(contact_j sp.java:1011)
org.apache.jsp.WEB_002dINF.views.contact _jsp._jspService(contact_jsp.java:130)
org.apache.jasper.runtime.HttpJspBase.se rvice(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(H ttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrap per.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.ser viceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.ser vice(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(H ttpServlet.java:728)
org.springframework.web.servlet.view.Int ernalResourceView.renderMergedOutputMode l(InternalResourceView.java:238)
org.springframework.web.servlet.view.Abs tractView.render(AbstractView.java:250)
org.springframework.web.servlet.Dispatch erServlet.render(DispatcherServlet.java: 1047)
org.springframework.web.servlet.Dispatch erServlet.doDispatch(DispatcherServlet.j ava:817)
org.springframework.web.servlet.Dispatch erServlet.doService(DispatcherServlet.ja va:719)
org.springframework.web.servlet.Framewor kServlet.processRequest(FrameworkServlet .java:644)
org.springframework.web.servlet.Framewor kServlet.doGet(FrameworkServlet.java:549 )
javax.servlet.http.HttpServlet.service(H ttpServlet.java:621)
javax.servlet.http.HttpServlet.service(H ttpServlet.java:728)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:368)
org.springframework.security.web.access. intercept.FilterSecurityInterceptor.invo ke(FilterSecurityInterceptor.java:109)
org.springframework.security.web.access. intercept.FilterSecurityInterceptor.doFi lter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.access. ExceptionTranslationFilter.doFilter(Exce ptionTranslationFilter.java:97)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.session .SessionManagementFilter.doFilter(Sessio nManagementFilter.java:100)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.AnonymousAuthenticationFilter.do Filter(AnonymousAuthenticationFilter.jav a:78)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.rememberme.RememberMeAuthenticat ionFilter.doFilter(RememberMeAuthenticat ionFilter.java:112)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.servlet api.SecurityContextHolderAwareRequestFil ter.doFilter(SecurityContextHolderAwareR equestFilter.java:54)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.savedre quest.RequestCacheAwareFilter.doFilter(R equestCacheAwareFilter.java:35)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.AbstractAuthenticationProcessing Filter.doFilter(AbstractAuthenticationPr ocessingFilter.java:187)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.authent ication.logout.LogoutFilter.doFilter(Log outFilter.java:105)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.context .SecurityContextPersistenceFilter.doFilt er(SecurityContextPersistenceFilter.java :79)
org.springframework.security.web.FilterC hainProxy$VirtualFilterChain.doFilter(Fi lterChainProxy.java:380)
org.springframework.security.web.FilterC hainProxy.doFilter(FilterChainProxy.java :169)
org.springframework.web.filter.Delegatin gFilterProxy.invokeDelegate(DelegatingFi lterProxy.java:237)
org.springframework.web.filter.Delegatin gFilterProxy.doFilter(DelegatingFilterPr oxy.java:167)
org.springframework.web.filter.Character EncodingFilter.doFilterInternal(Characte rEncodingFilter.java:88)
org.springframework.web.filter.OncePerRe questFilter.doFilter(OncePerRequestFilte r.java:76)
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.07.2013, 23:13
окай. значит шото оно не так работает. чего-то сессия умирает
поменяйте в сущности новости аннотацию
Java
1
@ManyToMany
на
Java
1
@ManyToMany(fetch = FetchType.EAGER)
и вот эта хрень не нужна в дао:
Java
1
2
3
for(News i : news) {
   List<Tags> tags = i.getTags();
}
1
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57
02.07.2013, 23:18  [ТС]
org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'tag_title' not found on type net.schastny.contactmanager.domain.Tags

Вот jsp:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<c:if test="${!empty newsList}">
    <table class="data">
 
        <c:forEach items="${newsList}" var="news">
            <tr>
                <td>${news.id}</td>
                <td>${news.title}</td>
                <td>${news.content}</td>
                <td>
                    
                    <c:if test="${!empty news.tags}">
                    
                        <c:forEach items="${news.tags}" var="tag">
                           <td>${tag.tag_title}</td>
                        </c:forEach>
                    </c:if>
                </td>
            </tr>
        </c:forEach>
    </table>
</c:if>

Вот domain.Tags:
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 net.schastny.contactmanager.domain;
 
 
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import net.schastny.contactmanager.domain.news.News;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
 
@Entity
@Table(name = "TAGS")
public class Tags {
    
    
 
    @Id
    @Column(name = "TAG_ID")
    @GeneratedValue
    private Integer tag_id;
 
    @Column(name = "TAG_TITLE")
    private String tag_title;
    
 
 
    public Integer getId() {
        return tag_id;
    }
 
    public void setId(Integer tag_id) {
        this.tag_id = tag_id;
    }
 
    public String getTitle() {
        return tag_title;
    }
 
    public void setTitle(String tag_title) {
        this.tag_title = tag_title;
    }
 
    
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name="NEWS_TAG", joinColumns=@JoinColumn(name="TAG_ID"),inverseJoinColumns=@JoinColumn(name="NEWS_ID"))
    private List<News> news=new ArrayList<News>();
    
    public List<News> getNews(){
        return this.news;
    }
    public void setNews(List<News> news)
    {
        this.news=news;
        }
    
    
}
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
02.07.2013, 23:37
эта штука
Java
1
${tag.tag_title}
EL выражение. оно обращается не к полю, а неявно вызывает геттер или сеттер, в зависимости от того куда ее пихнуть. поскольку геттер у вас носит название getTitle то EL'ка должна быть такая
Java
1
${tag.title}
уловили почему?
1
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 57
03.07.2013, 13:13  [ТС]
Большое спасибо. Все заработало. Я только не понимаю почему. Я же вроде ничего такого не передавал через контроллер. Откуда он узнал про теги? Все дело в связи?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
03.07.2013, 13:53
Цитата Сообщение от bbk Посмотреть сообщение
Большое спасибо. Все заработало. Я только не понимаю почему. Я же вроде ничего такого не передавал через контроллер. Откуда он узнал про теги? Все дело в связи?
Откуда кто узнал про что?

Вы хотите знать, откуда JSP узнал про то, какие свойства есть у тега?
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
03.07.2013, 14:46
Цитата Сообщение от bbk Посмотреть сообщение
Большое спасибо. Все заработало. Я только не понимаю почему. Я же вроде ничего такого не передавал через контроллер. Откуда он узнал про теги? Все дело в связи?
э... вы передаете объект "новость". сет объектом "тег" - его часть. почитайте про jsp, у вас серьезные пробелы в знаниях

а по поводу свойств - можете почитать этот холивар, если будет скучно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.07.2013, 14:46
Помогаю со студенческими работами здесь

Отношение многие-ко-многим ASP.NET MVC
Доброго времени суток, коллеги. Возникла ситуация, когда мне необходимо установить отношение многие ко многим. Опишу сразу на примере:...

Теги к новостям. Если теги повторяются, то добавлять их в БД не нужно
Не давно начал работать с MVC, надо сделать теги к материалу, т.е. есть таблица для материала (Id, название, описание, теги), также есть...

Как реализовать отношение "Многие-ко-многим" с помощью Мар?
Подскажите как реализовать отношение &quot;Многие - ко - многим&quot; с помощью Мар? Если я реализовываю класс Person в котором хранится имя и...

Является ли данное отношение связью "Многие-ко-многим"?
Являются ли отношения к таблице Cash_log связью многие-ко-многим?

Отношение между таблицами "многие ко многим"
Доброго времени суток! Дано: Таблица &quot;Продукты для рецептов&quot; Ключ - Рецепт Ключ - Продукт - Количество Таблица...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
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/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru