Solved, Ha Ha
After a short study of hibernate dtd, i got the answer. Just move the set tag out of join.
Code:
<subclass name="cn.text.dao.model.Hotel" discriminator-value="hotel" >
<set name="rooms" inverse="true" cascade="all">
<key>
<column name="hotel_id" length="48"/>
</key>
<one-to-many class="cn.text.dao.model.Room" />
</set>
<join table="hotel" fetch="select">
<key column="meta_id"/>
<property name="ranking" type="java.lang.Integer">
<column name="ranking" />
</property>
<property name="address" type="java.lang.String">
<column name="address" />
</property>
<property name="phone" type="java.lang.String">
<column name="phone" />
</property>
<property name="zip" type="java.lang.String">
<column name="zip" />
</property>
<property name="location" type="java.lang.String">
<column name="location" />
</property>
<property name="rate" type="java.lang.String">
<column name="rate" />
</property>
<property name="facility" type="java.lang.String">
<column name="facility" />
</property>
<property name="roomAmenity" type="java.lang.String">
<column name="room_amenity" />
</property>
<property name="extraBedPrice" type="java.math.BigDecimal">
<column name="extra_bed_price" />
</property>
<property name="breakfastPrice" type="java.math.BigDecimal">
<column name="breakfast_price" />
</property>
<property name="rankings" type="java.math.BigDecimal">
<column name="rankings" />
</property>
</join>
</subclass>