SpringDataJpa复合主键写法
😂 这篇文章最后更新于1451天前,您需要注意相关的内容是否还可用。
目录导航
方式一
方式二
方式一
复合主键类
@Embeddable public class UserKey implements Serializable { @Column(name = "NAME", nullable = false, length = 32) private String name; @Column(name = "AGE", nullable = true, length = 32) private String age; getter/setter... }
实体类
@Entity @Table(name = "USER") @IdClass(UserKey.class) public class User implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = -7768637914227571159L; /** * 物料编码 */ @Id @Column(name = "NAME", nullable = true, length = 32) private String name; /** * 技术规范书编码 */ @Id @Column(name = "AGE", nullable = true, length = 32) private String age; getter/setter }
查找方法
userRepository.findOne(userKey);
参考:https://www.cnblogs.com/boywwj/p/8031106.html
方式二
复合主键不能用@Id,需要用@EmbeddedId
主键类
@Embeddable public class UserFundPrimarykey implements Serializable { private static final long serialVersionUID = 1L; //用户ID private Integer userId; private String date; getter/setter... }
实体类
@Entity @Table(name = "user_funds") public class UserFund { /** * 主键 * 复合主键不能用@Id,需要用@EmbeddedId。插入数据的时候必须手工赋值 */ @EmbeddedId private UserFundPrimarykey userFundPK; //本金 @Column(precision=18, scale=5) private BigDecimal principal; //利率(5%传0.05) @Column(precision=18, scale=5) private BigDecimal rate; /** * 当天收益(日利息=本金*利率/365) * 保留2位小数 */ @Column(precision=18, scale=2) private BigDecimal interest; getter/setter... }
持久层
public interface UserFundRepository extends CrudRepository<UserFund, UserFundPrimarykey> {}
设值使用
UserFund uf2 = new UserFund(); //必须手动设置主键 uf2.setUserFundPK(new UserFundPrimarykey(2, "2017-07-01")); uf2.setRate(new BigDecimal("0.041")); uf2.setPrincipal(new BigDecimal("20000")); //截断,只保留两位小数 uf2.setInterest(uf2.getRate().multiply(uf2.getPrincipal()).divide(new BigDecimal("365"), 2, RoundingMode.DOWN)); userFundRepository.save(uf2);
留言评论
暂无留言