一、需求
要处理的表中有一个表是复合主键的,在网上搜例子,搜不到,自己慢慢搞了一个小时终于是完事了。赶紧记录一下。
二、解决
按照之前的经验,复合主键一般都需要创建一个主键类,方便后面的操作。但是按照常规操作,最后报错“找不到key这个列”,插入失败。
点进@PrimaryKey
这个注解里找找线索。
呕吼,果然,这里的意思是如果你有多个主键需要配合@PrimaryKeyClass
注解创建一个主键类。还需要配合@PrimaryKeyColumn
注解标注每个主键的名称之类的。
点进这个@PrimaryKeyColumn
注解里看看,其他两个我暂时没用到,有时间再查一下。
现在思路清晰了,代码奉上
主键类
/**
* historydata
* @author
*/
@Data
@PrimaryKeyClass
public class HistorydataKey implements Serializable {
/**
* 设备id
*/
@PrimaryKeyColumn(name = "deviceid", type = PrimaryKeyType.PARTITIONED)
private String deviceid;
/**
* 监测时间
*/
@PrimaryKeyColumn(name = "datatime_hour", type = PrimaryKeyType.PARTITIONED)
private Date datatimeHour;
private static final long serialVersionUID = 1L;
}
主类
/**
* historydata
* @author
*/
@Table("historydata")
@Data
public class Historydata implements Serializable {
@PrimaryKey
private HistorydataKey key;
/**
* 入库时间
*/
private Date accessdatatime;
/**
* 标记
*/
private Integer istransfer;
private static final long serialVersionUID = 1L;
}
Repository类
/**
* @author wangtianqi
* @create 2020-11-03 9:26
*/
public interface HistorydataRepository extends CrudRepository<Historydata, HistorydataKey> {
}
三、测试一下
测试下插入,插入成功了
@Test
public void test2() {
Historydata historydata = new Historydata();
HistorydataKey historydataKey = new HistorydataKey();
historydataKey.setDeviceid("123");
historydataKey.setDatatimeHour(new Date());
historydata.setKey(historydataKey);
historydataRepository.save(historydata);
}
测试下查询,没啥问题
System.out.println(historydataRepository.findAll());
问题解决