1

Java EE、Glassfish、および Netbeans を使用したソフトウェア エンジニアリングのプロジェクトを行っていますが、Java の経験がないために問題があります。

ユーザーにいくつかのイベントを作成する可能性を提供する Web サイトを開発しています。

eventイベントに関する情報 (ID、名前、場所、日付、作成者) をテーブルに保存できましたが、問題は別のテーブルに入力することですcalendar。このテーブルには、ID (自動的に順次生成される)、作成者の電子メール、およびイベント ID の 3 つの属性しかありません。このcalendarテーブルの目的は、すべての結合ユーザー イベントを収集することです。イベントは、その作成者だけでなく、招待された他のユーザーにも結合できます。

calendarテーブル内のデータを永続化しようとするとNullPointerExceptioneventテーブル内で ID が自動的に生成され、メソッドを呼び出すとgetEventID、この値はまだnull.

イベントの作成者IDCalendarManagerを取得してテーブルに書き込むだけで、 をアクティブにするにはどうすればよいですか?calendar

ここにいくつかのファイルがあります:

正常にEventManager動作します:

@Stateless
public class EventManager {

    @PersistenceContext
    public EntityManager em;

    @Inject
    Principal principal;

    public void saveEvent(Event event) {
        em.persist(event);
    }

    public void deleteEvent(Event event) {
        em.remove(event);
    }

}

CalendarEventsManager問題ありませんが、正しいパラメーターを受け取りません。

@Stateless
public class CalendarEventsManager {

    @PersistenceContext
    public EntityManager cm;

    @Inject
    Principal principal;

    public void saveCalendarEvents(CalendarEvents calendarevents) {
        cm.persist(calendarevents);     
    }

    public void deleteCalendarEvents(CalendarEvents calendarevents) {
        cm.remove(calendarevents);
    }
}

以下は、ユーザーが [イベントの作成] をクリックしたときにアクティブ化される Beanの重要な部分です。

public String saveEvent() {
    /* obtain the creator's email */
    creator = um.getLoggedUser().getEmail();
    this.event.setCreator(creator);

    /* save information in db event */
    em.saveEvent(event);

    /* save information in db calendar */

    eventid = event.getID();
    this.calendarevents.setUserEmail(creator);
    this.calendarevents.setEventID(eventid);
    cm.saveCalendarEvents(calendarevents);

    /* next page to visualize */
    return "displayEvent";
}

em.saveEvent(event)すべてがうまくいき、データベースが正しく更新されるまで、しかし問題は、私がそうするときです(eventid = getID()はクラスでgetID公開されており、正しいです)。Event更新されたばかりのデータベースから読み取らないため、システムは ID を読み取ることができません。

ここに Event クラスがあります。

@Entity
@Table(name="event")
public class Event implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private Integer id;
@NotNull(message = "May not be empty")
private String name;
@NotNull(message = "May not be empty")
private String place;
@NotNull(message = "May not be empty")
private String eventdate;
@NotNull(message = "May not be empty")
private String type;
@NotNull(message = "May not be empty")
private String visibility;
/*@NotNull(message = "May not be empty")
private String weather;*/
@NotNull(message = "May not be empty")
private String creator;

public void setID(Integer id){
    this.id = id;
}

public Integer getID() {
    return id;
}

public void setName(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPlace() {
    return place;
}

public void setPlace(String place) {
    this.place = place;
}

public String getDate() {
    return eventdate;
}

public void setDate(String eventdate) {
    this.eventdate = eventdate;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getVisibility() {
    return visibility;
}

public void setVisibility(String visibility) {
    this.visibility = visibility;
}

/*public String getWeather() {
    return weather;
}

public void setWeather(String weather) {
    this.weather = weather;
}*/

public String getCreator() {
    return creator;
}

public void setCreator(String creator) {
    this.creator = creator;
}

この問題を解決するためのアイデアはありますか? 注釈について読みました@PostPersistが、正しく適用する方法がわかりません:(

私を助けようとするすべての人にアドバイスをありがとう:D

EDIT1 : エラーはおそらく saveEvent() のこのコードにあります:

    this.calendarevents.setUserEmail(creator);
    this.calendarevents.setEventId(eventid);
    System.out.println("event id after get is:   " + this.calendarevents.getUserEmail());
    System.out.println("event id after get is:   " + this.calendarevents.getEventId());
    cm.saveCalendarEvents(calendarevents);

値を確認するために system.out.println を入れましたが、 system.out の兆候がないため、エラーは「this.calendarevents」にあります。これが完全な Bean です。

@Named(value = "createBean")
@RequestScoped
public class CreateEventBean {

@EJB
private EventManager em;
@EJB
private UserManager um;

private Event event;
private String creator;

@EJB
private CalendarEventsManager cm;

private Integer eventid=0;
private CalendarEvents calendarevents;

public CreateEventBean() {
}

public Event getEvent() {
    if (event == null){
        event = new Event();
    }
    return event;
}

public void setEvent(Event event) {
    this.event = event;

}

public CalendarEvents getCalendarEvent() {
    if (calendarevents == null){
        calendarevents = new CalendarEvents();
    }
    return calendarevents;
}

public void setCalendarEvents(CalendarEvents calendarevents) {
    this.calendarevents = calendarevents;

}

public String saveEvent(){
    /*obtain the creator's email*/
    creator=um.getLoggedUser().getEmail();
    this.event.setCreator(creator);

    /*save information in db event*/
    em.saveEvent(event);

    /*save information in db calendar*/
    System.out.println("event id before get is:   " + eventid);
    eventid=event.getId();
    System.out.println("event id after get is:   " + eventid);

    this.calendarevents.setEventId(eventid);
    System.out.println("eventid in calendar could be:   " + this.calendarevents.getEventId());
    this.calendarevents.setUserEmail(creator);
    System.out.println("useremail in calendar could be:   " + this.calendarevents.getUserEmail());

    cm.saveCalendarEvents(calendarevents);



    /*next page to visualize*/
    return "displayEvent";
}

}

「this.calendarevents.setEventId(eventid);」のエラーは本当にわかりません。それは 80 行目で、エラーは次のとおりです。原因: java.lang.NullPointerException at it.nyquistmeteocal.beans.CreateEventBean.saveEvent(CreateEventBean.java:80)]

CalendarEvents クラスは次のとおりです。

@Entity
@Table(name="calendarevents")
public class CalendarEvents implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private Integer id;
@NotNull(message = "May not be empty")
private String useremail;
@NotNull(message = "May not be empty")
private Integer eventid;


public Integer getId() {
    return id;
}

public void setName(Integer id) {
    this.id = id;
}

public String getUserEmail() {
    return useremail;
}

public void setUserEmail(String useremail) {
    this.useremail = useremail;
}


public Integer getEventId() {
    return eventid;
}

public void setEventId(Integer eventid) {
    this.eventid = eventid;
}


}
4

1 に答える 1