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 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏别先生

一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现

1:首先搞好实体类对象:   write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Ja...

5299
来自专栏强仔仔

SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作

今天给大家介绍一下如何SpringBoot中连接Mysql数据库,并使用JPA进行数据库的相关操作。 步骤一:在pom.xml文件中添加MYSQl和JPA的相关...

2626
来自专栏zingpLiu

python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

  对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程...

891
来自专栏Java 技术分享

WEB 小案例 -- 网上书城(一)

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

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

然后我把这段代码封装到一个Function moduleZDIS_GET_MATERIAL_IMAGES里,在Java代码里消费这个function modul...

1051
来自专栏你不就像风一样

Hibernate各种基本注解及一对一(多)关系映射采坑笔记

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity pass...

823
来自专栏xingoo, 一个梦想做发明家的程序员

如何在cuda内核函数中产生随机数(host端调用,device端产生)

最近,需要在kernel函数中调用浮点型的随机数。于是上网搜了下相关资料,一种方式是自己手动写一个随机数的__device__函数,然后在调用的时候调用这个函数...

2356
来自专栏C++

Windows核心编程:第3章 内核对象

582
来自专栏信安之路

SQL注入的常规思路及奇葩技巧

最近在看《SQL注入攻击与防御》这本书,看了之后感觉自己之前的视野和格局还是太小了些。SQLi的应用特别广泛,多种web数据库不说,移动安卓端也存在通用的SQL...

1120
来自专栏java系列博客

分布式下规则生成主键

2314

扫码关注云+社区