0

休止状態と注釈を使用する単純なアプリケーションをテストしようとしています。次の外部キー制約を持つ次のデータベース テーブルがあります。

create table user_info 
(
mobile_number varchar(16) primary key, 
gender char(1),
language varchar(4))


create table user_order_info
(order_id integer(16) not null primary key auto_increment,   
mobile_number varchar(16) not null,
location_name varchar(32) not null, 
foreign key(mobile_number) references user_info(mobile_number),

create table user_queue_order_info
(queue_id integer(16) not null primary key auto_increment,
order_id integer(16),   
mobile_number varchar(16) not null,  
order_value integer(8) not null,   
foreign key(mobile_number) references user_info(mobile_number),
foreign key(order_id) references user_order_info(order_id) on delete cascade)

上記のテーブルのそれぞれのエンティティ テーブルは次のとおりです。

@Entity
@Table(name = "user_info")
public class UserInfo implements Serializable {         
private String mobileNumber;    
private char gender;
private String language;
    //getters and setters and constructors
}


@Entity
@Table(name = "user_order_info")

public UserOrderInfo implements Serializable {  
private long orderId;
private String locationName;        
private UserInfo userInfo;
    //getters and setters and constructors
}


@Entity
@Table(name = "user_queue_order_info")

public class UserQueueOrderInfo implements Serializable {   

private long queueId;   
private int orderValue; 
private UserInfo userInfo;
private UserOrderInfo userOrderinfo;
    //getters and setters , constructors

問題は、次の方法を使用して UserOrderInfoDao を使用してデータベースにアクセスしようとすると、例外が発生することです。

public UserOrderInfo UserOrderInfoByMobileNumber(String mobileNumber ) {
List<UserOrderInfo> userOrderInfoList =    sessionFactory.getCurrentSession().createQuery("from UserOrderInfo where userInfo.mobileNumber='"+mobileNumber+"'").list();
    if(!userOrderInfoList.isEmpty()){
        return userOrderInfoList.get(0);
    }
    return null;
}

例外をトレースしてデバッグしようとすると、次の例外が発生します。

パス [userInfo.mobileNumber] を解決できない例外、予期しないトークン [userInfo] [com.appls.entity.UserOrderInfo から userInfo.mobileNumber='7770909090']

なぜこの問題が発生するのですか?貴重な提案をお待ちしています。

そして、次の方法でゲッターとセッターでマッピングを行いました。

@Id 
@Column(name = "mobile_number")
public String getMobileNumber() {
    return mobileNumber;
}

他のフィールドも同様です。

User_info のエンティティは

    private String mobileNumber;        
private char gender;
private String language;

@Id 
@Column(name = "mobile_number")
public String getMobileNumber() {
    return mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
    this.mobileNumber = mobileNumber;
}

@Column(name = "gender")
public char getGender() {
    return gender;
}
public void setGender(char gender) {
    this.gender = gender;
}

@Column(name = "language")
public String getLanguage() {
    return language;
}
public void setLanguage(String language) {
    this.language =language;
}

public UserInfo() {
    super();        
}


public UserInfo(String mobileNumber){
    super();
    this.mobileNumber = mobileNumber;
}

public UserInfo(String mobileNumber, char gender, String language) {
    super();
    this.mobileNumber =mobileNumber;
    this.gender = gender;
    this.language = language;

}   

@Override
public String toString() {
return "{\"mobileNumber\": \"" + this.mobileNumber
            + "\", \"gender\": \"" + this.gender
            + "\", \"language\": \"" + this.language }";
}
4

2 に答える 2

2

private String mobileNumber;ゲッター/セッターを含む変更

なのでprivate String mobile_number;

または注釈を付ける

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

private String locationName;と同じprivate String orderValue;

クエリは次のようになります createQuery("from UserOrderInfo userOrderInfo where userOrderInfo.userInfo.mobileNumber='"+mobileNumber+"'").list()

于 2013-01-03T11:32:02.183 に答える
0

注釈によって、DB または pojo で mobileNumber フィールドを mobile_number として変更する必要があります。

于 2013-01-03T11:59:38.127 に答える