小弟这两天碰到这个问题,卡住了,头疼ing
表T_USER (用户表) 和表T_ORDERITEM(航班安排表)是多对多关系,中间表是T_ORDER (用户订单表),用hibernate映射时候,采用的是有连接表的多对多关联,表结构如下:
T_USER表:
CREATE TABLE T_USER
(
`USER_ID` BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL,
`ACCOUNT_NO` VARCHAR(20)UNIQUE NOT NULL,
`NAME` VARCHAR(20) NOT NULL,
`PASSWORD` VARCHAR(20) NOT NULL,
`SEX` INT NOT NULL,
`PHONE` VARCHAR(20),
`EMAIL` VARCHAR(30),
`ISVALID` INT NOT NULL
);T_ORDERITEM表:
CREATE TABLE T_ORDERITEM
(
`ORDERITEM_ID`  BIGINT  AUTO_INCREMENT PRIMARY KEY NOT NULL,
`FLIGHT_ID` BIGINT NOT NULL,
`DATE`  DATETIME NOT NULL,
FOREIGN KEY(FLIGHT_ID) REFERENCES T_FLIGHT(FLIGHT_ID)
);T_ORDER表:
CREATE TABLE T_ORDER
(
`USER_ID`  BIGINT  NOT NULL,
`ORDERITEM_ID` BIGINT NOT NULL,
PRIMARY KEY(USER_ID,ORDERITEM_ID),
FOREIGN KEY(USER_ID) REFERENCES T_USER(USER_ID),
FOREIGN KEY(ORDERITEM_ID) REFERENCES T_ORDERITEM(ORDERITEM_ID)
);
实体bean如下:
UserPO类:
public class UserPO
{
private long id;
private String accountNo;
private String name;
private String password;
private int sex;
private String phone;
private String email;
private boolean isValid;
private Set<OrderItemPO> orderItems=new HashSet<OrderItemPO>(); 
getter和setter方法省略
}
其映射文件如下:
<hibernate-mapping package="com.ordertickets.po">
<class name="UserPO" table="T_USER">
<id name="id" type="java.lang.Long">
<column name="user_id" />
<generator class="increment"></generator>
</id>
<property name="accountNo" column="account_no"/>
<property name="name" column="name"/>
<property name="password" column="password"/>
<property name="sex" column="sex"/>
<property name="phone" column="phone"/>
<property name="email" column="email"/>
<set name="orderItems" table="T_ORDER" cascade="all" lazy="false">
<key column="user_id" not-null="true"/>
<many-to-many class="OrderItemPO" column="orderitem_id"/>
</set>
</class>
</hibernate-mapping>OrderItemPO类:
public class OrderItemPO
{
private long id;
private FlightPO flight;;
private Date date;
private Set<UserPO> users=new HashSet<UserPO>();
getter和setter方法省略
}
其映射文件如下:
<hibernate-mapping package="com.ordertickets.po">
<class name="OrderItemPO" table="T_ORDERITEM">
<id name="id" type="java.lang.Long">
<column name="orderitem_id" />
<generator class="increment"></generator>
</id>
<many-to-one name="flight" class="FlightPO" column="flight_id"/>
<property name="date" column="date"/>
<set name="users" table="T_ORDERITEM" inverse="true" cascade="all" lazy="false">
<key column="orderitem_id" not-null="true"/>
<many-to-many class="UserPO" column="user_id"/>
</set>
</class>
</hibernate-mapping>在查询OrderitemPO事例中的users(是一个list)的时候会报错,hibernate自动生成的sql语句已经发现不对劲了,产生的sql如下:
select users0_.orderitem_id as orderitem1_1_, users0_.user_id as user4_1_, userpo1_.user_id as user1_6_0_, userpo1_.account_no as account2_6_0_, userpo1_.name as name6_0_, userpo1_.password as password6_0_, userpo1_.sex as sex6_0_, userpo1_.phone as phone6_0_, userpo1_.email as email6_0_ from T_ORDERITEM users0_ left outer join T_USER userpo1_ on users0_.user_id=userpo1_.user_id where users0_.orderitem_id=?然后就报这个错误:Unknown column 'users0_.user_id' in 'field list'
似乎select到第二个字段的时候就有发现users0_.user_id有问题了。