Springboot JPA 实现复合主键

本文节选自 《Netkiller Spring cloud 手札》

Netkiller Spring Cloud 手札

Spring Cloud Cookbook

Mr. Neo Chan, 陈景峰(BG7NYT)

中国广东省深圳市宝安区龙华镇溪山美地 518109 +86 13113668890 +86 755 29812080 <netkiller@msn.com>

$Id: book.xml 606 2013-05-29 09:52:58Z netkiller $

版权 © 2015-2018 Neo Chan

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

http://www.netkiller.cn

http://netkiller.github.io

http://netkiller.sourceforge.net

微信订阅号 netkiller-ebook (微信扫描二维码)

QQ:13721218 请注明“读者”

QQ群:128659835 请注明“读者”

package cn.netkiller.wallet.domain;

import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;

@Entity
public class UserHasToken {
	@EmbeddedId
	private UserHasTokenPk id;

	private String name;
	private String symbol;
	private int decimals;

	public UserHasToken() {
		// TODO Auto-generated constructor stub
	}

	public UserHasTokenPk getId() {
		return id;
	}

	public void setId(UserHasTokenPk id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSymbol() {
		return symbol;
	}

	public void setSymbol(String symbol) {
		this.symbol = symbol;
	}

	public int getDecimals() {
		return decimals;
	}

	public void setDecimals(int decimals) {
		this.decimals = decimals;
	}

	@Embeddable
	public class UserHasTokenPk implements java.io.Serializable {

		private static final long serialVersionUID = 1242827922377178368L;
		private String address;
		private String contractAddress;

		public UserHasTokenPk(String address, String contractAddress) {
			super();
			this.address = address;
			this.contractAddress = contractAddress;
		}

		public String getAddress() {
			return address;
		}

		public void setAddress(String address) {
			this.address = address;
		}

		public String getContractAddress() {
			return contractAddress;
		}

		public void setContractAddress(String contractAddress) {
			this.contractAddress = contractAddress;
		}

		@Override
		public String toString() {
			return "UserHasTokenPk [address=" + address + ", contractAddress=" + contractAddress + "]";
		}

	}

}
package cn.netkiller.wallet.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import cn.netkiller.wallet.domain.UserHasToken;
import cn.netkiller.wallet.domain.UserHasToken.UserHasTokenPk;;

public interface UserHasTokenRepository extends JpaRepository<UserHasToken, UserHasTokenPk> {

	@Query("select an from UserHasToken uht where uht.id.address=:address")
	List<UserHasToken> findByAddress(@Param("address") String address);

	@Query("select an from UserHasToken uht where uht.id.address=:address and uht.id.contractAddress=:contractAddress")
	List<UserHasToken> findByPk(@Param("address") String address, @Param("contractAddress") String contractAddress);
}
		

数据库表结构

CREATE TABLE "user_has_token" (
  "address" varchar(255) NOT NULL,
  "contract_address" varchar(255) NOT NULL,
  "decimals" int(11) NOT NULL,
  "name" varchar(255) DEFAULT NULL,
  "symbol" varchar(255) DEFAULT NULL,
  PRIMARY KEY ("address","contract_address")
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

1 条评论
登录 后参与评论

相关文章

来自专栏王磊的博客

Ext.Net常用方法

1、js(Ext)操作 Ext.Msg.alert('系统提示', '未连接血站,该功能暂时不能使用。'); Ext.getCmp("id").getVal...

2817
来自专栏程序员八阿哥

年薪20万Python工程师进阶(5):Python ORM框架之 Peewee入门

之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类、对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立...

1092
来自专栏web编程技术分享

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第九节)

2476
来自专栏yukong的小专栏

【ssm个人博客项目实战01】SSM环境搭建1、ssm系统架构2、项目整合

maven是一个优秀的项目对象管理器工具 我可以通过在pom.xml中添加需要的jar包的依赖就可以导入对应的jar包了,非常的方便。 下面就列出整合ssm所...

962
来自专栏Jerry的SAP技术分享

通过90行代码学会HTML5 WebSQL的4种基本操作

Web SQL数据库API是一个独立的规范,在浏览器层面提供了本地对结构化数据的存储,已经被很多现代浏览器支持了。

691
来自专栏SpringBoot 核心技术

第二章:使用QueryDSL与SpringDataJPA实现单表普通条件查询

1392
来自专栏Ryan Miao

Java Web基础入门

前言 语言都是相通的,只要搞清楚概念后就可以编写代码了。而概念是需要学习成本的。 Java基础 不用看《编程思想》,基础语法看 http://www.runo...

2327
来自专栏kwcode

利用autocomplete.js实现仿搜索效果(ajax动态获取后端[C#]数据)

实现功能描述: 1、实现搜索框的智能提示 2、第二次浏览器缓存结果 3、实现仿百度搜索 <!DOCTYPE html> <html xmlns="http://...

3365
来自专栏NetCore

[实录]解决Migrator.Net 小bug

好久没写了,平时比较忙,只能趁周末的时候,写一点小东西,自己也记录一下。 平时我们做项目的时候,都会有自己的数据访问层,为了能方便以后的升级,我们一般会抽象出数...

1975
来自专栏喵了个咪的博客空间

phalcon-入门篇7(Model层基础使用)

#phalcon-入门篇7(Model层基础使用)# ? 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好者,我们提...

3389

扫码关注云+社区