正好遇到这样的问题,要更具外键查询出外键所在表数据。
解决办法:
1、直接通过设计表,外键名即为关联表的主键名而不是来年改革表的主键都为id,这样可以直接查询出。--------这是通常的关联办法,即两张表的主键名称不同
2、在两张表注解名称相同并且实体又没有设置这个外键字段而是以实体的情况下,关联实体主键字段不管怎么设置都无法得到主键,所关联的实体主键就是主表所在的主键值,所以需要使用另一个实体字段来转换这个关联表的主键。
第一种思路的通用的方法,而我正好遇到了第二种情况,不管我怎么样设置或者是用别名实在获取的都是主表的id。当然有更好思路的你可以帮我更好的解决就最好了。
代码:
Mapper.xml
//表关联映射
<resultMap id="stream" type="com.sohu.bms.model.content.Stream">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="index" property="index" jdbcType="INTEGER" />
<result column="template" property="template" javaType="int" jdbcType="INTEGER" />
<result column="display" property="display" jdbcType="BOOLEAN" />
<association property="room" column="room_id" javaType="com.sohu.bms.model.room.Room" jdbcType="INTEGER" resultMap="room"/>
<association property="tag" column="tag_id" javaType="com.sohu.bms.model.content.Tag" jdbcType="INTEGER" resultMap="tag"/>
</resultMap>
<resultMap id="BaseResultMap" type="com.sohu.bms.model.cooperation.AutoAlbumStream" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="album_id" property="album_id" jdbcType="VARCHAR" />
<result column="album_type" property="album_type" jdbcType="INTEGER" />
<!-- <result column="stream_id" property="stream_id" javaType="int" jdbcType="INTEGER" />-->
<result column="begin_time" property="begin_time" javaType="java.util.Date" jdbcType="TIMESTAMP" />
<result column="end_time" property="end_time" javaType="java.util.Date" jdbcType="TIMESTAMP" />
<association property="stream" column="stream_id" javaType="com.sohu.bms.model.content.Stream" jdbcType="INTEGER" resultMap="stream"/>
</resultMap>
//查询方法
<select id="getAutoalbumById" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
album.id,album.album_id,album.album_type,album.begin_time,album.end_time,album.stream_id as template
from cooperation_auto_album album left outer join content_stream con on album.stream_id=con.id where album.id=#{id,jdbcType=INTEGER}
</select>
实体
Stream.java
private int id;
private String name;//名称
private Room room;
private int index=1;//位置
private int template=0;//模板
private boolean display=true;//是否显示
private Tag tag;
AutoAlbumStream.java
private int id;
private String album_id;
private int album_type=0;
private Stream stream;
private Date begin_time;//开始抓取时间
private Date end_time;//结束抓取时间