2

次のように2つのテーブルがあります

@Entity
@Table (name="booking_basic")
public class Booking_Basic {

    @Id
    @GeneratedValue
    @Column (name="booking_id")
    private int booking_id;  
    @GenericGenerator(name="foreign", strategy="foreign", parameters={@org.hibernate.annotations.Parameter(name="property", value="organizer_basic")})
    @Column (name="org_id")
    private int org_id;
    @OneToOne(fetch=FetchType.EAGER, optional=true)
    @PrimaryKeyJoinColumn
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})   
    private Organizer_Basic organizer_basic;
        ....

もう一つは

@Entity
@Table(name="organizer_basic")
public class Organizer_Basic
{

  @Id
  @GeneratedValue
  @Column(name="org_id")
  private int org_id;

  @Column(name="name")
  private String name;

  @OneToOne(cascade={javax.persistence.CascadeType.ALL}, fetch=FetchType.LAZY, mappedBy="organizer_basic")
  @JoinColumn(name="org_id")  
  private Booking_Basic booking_basic;
 .....

ここで、予約 ID に基づいてすべての主催者名を取得したいと思います。booking_basic が booking_id 1 で org_id = 15 の場合、org_id が 15 である主催者名にアクセスしたいと思います。

        Session session = HibernateSessionFactory.getSessionFactory().openSession();
        Transaction transaction = null;
        try {
          transaction = session.beginTransaction();
          Query query = session.createQuery("FROM Booking_Basic");
          List<Booking_Basic> booking_basic = query.list();
          for(Booking_Basic b : booking_basic) 
             System.out.print("Booking Type : " + b.getOrganizer_basic().getName());
          }
          transaction.commit();
        }
        catch (Exception e) {
          e.printStackTrace();
          transaction.rollback();
        }

しかし、実行しようとすると、null ポインター例外が発生します。どんな体にも考えがあります、助けてください。

4

1 に答える 1

1

これを試して:

session.createQuery("FROM Booking_Basic as b left join b.organizer_basic as o");
于 2013-07-11T12:27:20.570 に答える