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