Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка доступа к классу, ошибка доступа к классу 
:(
    Опции темы
A5uKa
Дата 5.9.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



EAR приложение на JBoss сервере, проблема в доступе к mySQL , точнее к классу отвечающему за одну из из таблиц

вот ошибка
Цитата

javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of students.entity.Groups.gNumber


и вот код класса
Цитата

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package students.entity;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author A5uKa
 */
@Entity
@Table(name = "groups")
@NamedQueries({@NamedQuery(name = "Groups.findByGNumber", query = "SELECT g FROM Groups g WHERE g.gNumber = :gNumber"), @NamedQuery(name = "Groups.findByGFa", query = "SELECT g FROM Groups g WHERE g.gFa = :gFa")})
public class Groups implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "G_Number", nullable = false)
    private Integer gNumber;
    @Column(name = "G_Fa")
    private String gFa;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "sGroup")
    private Collection<Students> studentsCollection;

    public Groups() {
    }

    public Groups(Integer gNumber) {
        this.gNumber = gNumber;
    }

    public Integer getGNumber() {
        return gNumber;
    }

    public void setGNumber(Integer gNumber) {
        this.gNumber = gNumber;
    }

    public String getGFa() {
        return gFa;
    }

    public void setGFa(String gFa) {
        this.gFa = gFa;
    }

    public Collection<Students> getStudentsCollection() {
        return studentsCollection;
    }

    public void setStudentsCollection(Collection<Students> studentsCollection) {
        this.studentsCollection = studentsCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (gNumber != null ? gNumber.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 Groups)) {
            return false;
        }
        Groups other = (Groups) object;
        if ((this.gNumber == null && other.gNumber != null) || (this.gNumber != null && !this.gNumber.equals(other.gNumber))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "students.entity.Groups[gNumber=" + gNumber + "]";
    }

}


какие есть предположения ? ... как я понимаю класс у меня правильный а ошибка неправильная smile
PM   Вверх
ivg
Дата 5.9.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата из JavaBeans spec.
Цитата

8.8 Capitalization of inferred names.
When we use design patterns to infer a property or event name, we need to decide what rules to follow for capitalizing the inferred name. If we extract the name from the middle of a normal mixedCase style Java name then the name will, by default, begin with a capital letter.

Java programmers are accustomed to having normal identifiers start with lower case letters. Vigorous reviewer input has convinced us that we should follow this same conventional rule for property and event names.

Thus when we extract a property or event name from the middle of an existing Java name, we normally convert the first character to lower case. However to support the occasional use of all upper-case names, we check if the first two characters of the name are both upper case and if so leave it alone. So for example,

    “FooBah” becomes “fooBah”
    “Z” becomes “z”
    “URL” becomes “URL”

We provide a method Introspector.decapitalize which implements this conversion rule.

Вам нужно переименовать поля gNumber и gFa, таким образом, чтобы вторая буква не была в верхнем регистре, ну и соответствующие геттеры/сеттеры тоже.
PM MAIL   Вверх
A5uKa
Дата 6.9.2008, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Не думаю , у меня другие запросы написаны также, но работают , тут просто непонятно в чём проблема...

ещё если делать clean build выдаёт "uses unchecked or unsafe operations." на одном из классов...

PM   Вверх
ivg
Дата 6.9.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(A5uKa @  6.9.2008,  12:10 Найти цитируемый пост)
Не думаю , у меня другие запросы написаны также, но работают , тут просто непонятно в чём проблема...

Поля класса переименовать. Не думаю, что не стоит даже попробовать.  smile 
PM MAIL   Вверх
A5uKa
Дата 6.9.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



в логе присутствует забавная для меня ошибка конвертации 

Цитата

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field students.entity.Groups.gNumber to java.lang.Integer 
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146) 
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150) 
        at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37) 
        at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:18) 
        at java.lang.reflect.Field.get(Field.java:358) 
        at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32) 
        ... 79 more 


Это сообщение отредактировал(а) A5uKa - 6.9.2008, 13:17
PM   Вверх
A5uKa
Дата 7.9.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Переименование не помогает , после него тоже самое

Цитата

could not get a field value by reflection getter of students.entity.Groups.gruopNumber



PM   Вверх
ivg
Дата 7.9.2008, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(A5uKa @  7.9.2008,  21:18 Найти цитируемый пост)
Переименование не помогает , после него тоже самое

А геттеры/сеттеры поправили? 
Цитата(A5uKa @  7.9.2008,  21:18 Найти цитируемый пост)
could not get a field value by reflection getter of students.entity.Groups.gruopNumber
 Ы?
Покажите код класса после правки...


Это сообщение отредактировал(а) ivg - 7.9.2008, 18:38
PM MAIL   Вверх
A5uKa
Дата 7.9.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Цитата

 Ы?

это потомучто вручную smile так там group

показываю :

Цитата

package students.entity;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author A5uKa
 */
@Entity
@Table(name = "groups")
@NamedQueries({@NamedQuery(name = "Groups.findBygroupNumber", query = "SELECT g FROM Groups g WHERE g.groupNumber = :groupNumber"), @NamedQuery(name = "Groups.findByGFa", query = "SELECT g FROM Groups g WHERE g.gFa = :gFa")})
public class Groups implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "G_Number", nullable = false)
    private Integer groupNumber;
    @Column(name = "G_Fa")
    private String gFa;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "sGroup")
    private Collection<Students> studentsCollection;

    public Groups() {
    }

    public Groups(Integer groupNumber) {
        this.groupNumber = groupNumber;
    }

    public Integer getGroupNumber() {
        return groupNumber;
    }

    public void setgroupNumber(Integer groupNumber) {
        this.groupNumber = groupNumber;
    }


главный сервлет
Цитата

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package students.web;

import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
 
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import students.entity.Students;
import students.entity.Groups;
import students.logic.InstituteLogicLocal;
 
import students.web.forms.MainFrameForm;
import students.web.forms.StudentForm;
 
public class MainFrameServlet extends HttpServlet
{
    @EJB(name = "InstituteLogic")
    private InstituteLogicLocal ms;
 
    protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
    {
        int answer = 0;
        answer = checkAction(req);
 
        if (answer == 1) {
            Students s = new Students();
            s.setSFio("Empty");
            s.setSDate(new Date());
            s.setSEducationYear(Calendar.getInstance().get(Calendar.YEAR));
            List<Groups> groups = ms.getGroupsList();
 
            StudentForm sForm = new StudentForm();
            sForm.initFromStudent(s);
            sForm.setGroups(groups);
            req.setAttribute("student", sForm);
            getServletContext().getRequestDispatcher("/StudentFrame.jsp").forward(req, resp);
            return;
        }
 
        if (answer == 2) {
            if (req.getParameter("FIO") != null) {
                String stFIO = (req.getParameter("FIO"));
                Students s = ms.FindStud(stFIO);
                List<Groups> groups = ms.getGroupsList();
 
                StudentForm sForm = new StudentForm();
                sForm.initFromStudent(s);
                sForm.setGroups(groups);
                req.setAttribute("student", sForm);
                getServletContext().getRequestDispatcher("/StudentFrame.jsp").forward(req, resp);
                return;
            }
        }
 
        String gs = req.getParameter("sGroup");
        String ys = req.getParameter("year");
 
        if (answer == 3) {
            String newGs = req.getParameter("newsGroup");
            String newYs = req.getParameter("newYear");
 
            ms.moveStudentsToGroup(Integer.parseInt(gs), Integer.parseInt(ys), Integer.parseInt(newGs), Integer.parseInt(newYs));
            gs = newGs;
            ys = newYs;
        }
 
        int groupId = -1;
        if (gs != null) {
            groupId = Integer.parseInt(gs);
        }
        int year = Calendar.getInstance().get(Calendar.YEAR);
        if (ys != null) {
            year = Integer.parseInt(ys);
        }
 
        MainFrameForm form = new MainFrameForm();
 
        List<Groups> groups = ms.getGroupsList();
        if (groupId == -1) {
            Iterator<Groups> i = groups.iterator();
            groupId = i.next().getGroupNumber();
        }
        List<Students> students = ms.getStudentsFromGroup(groupId, year);
        form.setGroupId(groupId);
        form.setYear(year);
 
        form.setGroups(groups);
        form.setStudents(students);
 
        req.setAttribute("form", form);
        getServletContext().getRequestDispatcher("/MainFrame.jsp").forward(req, resp);
    }
 
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        processRequest(req, resp);
    }
 
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        processRequest(req, resp);
    }
 
    private int checkAction(HttpServletRequest req) {
        if (req.getParameter("Add") != null) {
            return 1;
        }
        if (req.getParameter("Edit") != null) {
            return 2;
        }
        if (req.getParameter("MoveGroup") != null) {
            return 3;
        }
        if (req.getParameter("Delete") != null) {
            if (req.getParameter("FIO") != null) {
                ms.deleteStudents(Integer.parseInt(req.getParameter("FIO")));
            }
            return 0;
        }
        return 0;
    }
}


лог прикреплён

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  log.txt 26,93 Kb
PM   Вверх
ivg
Дата 7.9.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Покажите ещё код класса students.entity.Students.
Ошибка в логе похожа на баг Хибернэйта, причём она возникает при прямом доступе к значению поля, минуя геттер. Хотя это вполне может быть ошибка маппинга отношения Students к сущности Groups. Вобщем нужен код Students.
PS: Я бы вам посоветовал работать со стабильной версией JBoss'а, а не с бетой (часть библиотек Хибернэйта, идущие с ней тоже беты).
Ну и попробовать привести в порядок имена всех полей(свойств) в обеих сущностях(Students и Groups), так как вы это сделали с groupNumber.
Да, а ещё покажите код метода ManagementSystemBean#getStudentsFromGroup()

Это сообщение отредактировал(а) ivg - 7.9.2008, 21:52
PM MAIL   Вверх
A5uKa
Дата 7.9.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



код класса students.entity.Students
Цитата

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package students.entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author A5uKa
 */
@Entity
@Table(name = "students")
@NamedQueries({@NamedQuery(name = "Students.findBySFio", query = "SELECT s FROM Students s WHERE s.sFio = :sFio"), @NamedQuery(name = "Students.findBySEducationYear", query = "SELECT s FROM Students s WHERE s.sEducationYear = :sEducationYear"), @NamedQuery(name = "Students.findBySDate", query = "SELECT s FROM Students s WHERE s.sDate = :sDate"),
 @NamedQuery(name = "Students.findByGroupAndYear",
        query = "SELECT s FROM Students s WHERE s.sGroup = :sGroup AND s.sEducationYear=:sEducationYear"),
 @NamedQuery(name = "Students.updateGroupAndYear",
        query = "UPDATE Students s SET s.sGroup=:sGroup, s.sEducationYear=:sEducationYear WHERE s.sGroup = :oldsGroup AND s.sEducationYear=:oldsEducationYear")})
public class Students implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "S_FIO", nullable = false)
    private String sFio;
    @Column(name = "S_EducationYear", nullable = false)
    private int sEducationYear;
    @Column(name = "S_Date")
    @Temporal(TemporalType.DATE)
    private Date sDate;
    @JoinColumn(name = "S_Group", referencedColumnName = "G_Number")
    @ManyToOne
    private Groups sGroup;

    public Students() {
    }

    public Students(String sFio) {
        this.sFio = sFio;
    }

    public Students(String sFio, int sEducationYear) {
        this.sFio = sFio;
        this.sEducationYear = sEducationYear;
    }

    public String getSFio() {
        return sFio;
    }

    public void setSFio(String sFio) {
        this.sFio = sFio;
    }

    public int getSEducationYear() {
        return sEducationYear;
    }

    public void setSEducationYear(int sEducationYear) {
        this.sEducationYear = sEducationYear;
    }

    public Date getSDate() {
        return sDate;
    }

    public void setSDate(Date sDate) {
        this.sDate = sDate;
    }

    public Groups getSGroup() {
        return sGroup;
    }

    public void setSGroup(Groups sGroup) {
        this.sGroup = sGroup;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (sFio != null ? sFio.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 Students)) {
            return false;
        }
        Students other = (Students) object;
        if ((this.sFio == null && other.sFio != null) || (this.sFio != null && !this.sFio.equals(other.sFio))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "students.entity.Students[sFio=" + sFio + "]";
    }

}


со стабильной версией работать не могу так как она ещё не вышла

Цитата

-Вы используете JBoss [Morpheus] 5.0.0.CR1 (build: SVNTag=JBoss_5_0_0_CR1 date=200806301254). Это баг данной версии JBoss.

-4ые не могут использлвать EE 5 на нетбинсе (не лицензированы для него) 

поэтому бэта


вот середина session-bean-a
Цитата

@Stateless
public class InstituteLogicBean implements InstituteLogicRemote, InstituteLogicLocal {
    @PersistenceContext
    private EntityManager em; 

    public Students FindStud(String S_FIO) { 
       return em.find(Students.class, S_FIO);

    }

    public List<Groups> getGroupsList() {
       Query q = em.createQuery("SELECT g FROM Groups g");
        List<Groups> l= q.getResultList();
        return l;
    }

   public List<Students> getStudentsFromGroup(int sGroup, int year) {
        Query q = em.createNamedQuery("Students.findByGroupAndYear");
        q.setParameter("sGroup", sGroup);
        q.setParameter("sEducationYear", year);
        List<Students> l= q.getResultList();
        return l;
    }

    public void moveStudentsToGroup(int sGroup, int year, int newsGroup, int newYear) {
        Query q = em.createNamedQuery("Students.updateGroupAndYear");
        q.setParameter("sGroup", newsGroup);
        q.setParameter("sEducationYear", newYear);
        q.setParameter("oldsGroup", sGroup);
        q.setParameter("oldsEducationYear", year);
       
        q.executeUpdate();
    }

    public void insertStudents(Students st) {
        em.persist(st);
    }

    public void updateStudents(Students st) {
        Students sOld = em.find(Students.class, st.getSFio());
        sOld.setSFio(st.getSFio());
        sOld.setSDate(st.getSDate());
        sOld.setSEducationYear(st.getSEducationYear());
        sOld.setSGroup(st.getSGroup());        
        em.persist(sOld);
    }

    public void deleteStudents(int sFio) {
        Students sOld = em.find(Students.class, sFio);
        em.remove(sOld);
    }

    public void persist(Object object)

    {

        em.persist(object);

    }

}


функция  public Students FindStud(String S_FIO) работет безошибочно
в сервлете 
Students d = ms.FindStud(request.getParameter("FIO"));
out.println("<h1>Student " + d.getSFio() + " in " + d.getSGroup().getGroupNumber() + "  </h1>");
PM   Вверх
ivg
Дата 7.9.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Вот теперь понятно в чём дело: В методе InstituteLogicBean#getStudentsFromGroup() в качестве первого параметра запроса вы даёте int, а надо объект класса Groups
PM MAIL   Вверх
A5uKa
Дата 9.9.2008, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Да ! Точно ! Спасибо  smile 
PM   Вверх
A5uKa
Дата 9.9.2008, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Да ! Точно ! Спасибо  smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1054 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.