我从未见过这种形式对我有帮助。我希望现在能够。
在我的spring-boot中,我的数据库有两个主键
TransId和PrsnRef
现在,当我为名为PersonCore的数据库表创建实体时,我得到了2个类
PersonCore(众所周知,这里有其他所有数据)
/**
* The persistent class for the PERSON_CORE database table.
*
*/
@Entity
@Table(name="PERSON_CORE")
@NamedQuery(name="PersonCore.findAll", query="SELECT f FROM PersonCore f")
public class PersonCore implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private PersonCorePK id;
@Column(name="PRSN_AGE")
private BigDecimal prsnAge;
@Column(name="PRSN_AMER_INDIAN_ALASKA_NTV")
private String prsnAmerIndianAlaskaNtv;
@Column(name="PRSN_DOB")
private String prsnDob;
PersonCorePK(这有两个Id的transid和personref)
/**
* The primary key class for the PERSON_CORE database table.
*
*/
@Embeddable
public class PersonCorePK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@Column(name="TRANS_ID")
private String transId;
@Column(name="PRSN_REF")
private String prsnRef;
public FdshPersonCorePK() {
}
public String getTransId() {
return this.transId;
}
public void setTransId(String transId) {
this.transId = transId;
}
public String getPrsnRef() {
return this.prsnRef;
}
public void setPrsnRef(String prsnRef) {
this.prsnRef = prsnRef;
}
我正在尝试使用spring-boot创建RESTFul服务 我使用@RepositoryRestResource(bla bla bla)
创建了存储库@RepositoryRestResource(path = "person", collectionResourceRel = "FdshPersonHDR")
public interface PersonCoreRepository extends PagingAndSortingRepository<PersonCore, PersonCorePK> {
Collection<PersonCore > findAll();
Collection<PersonCore > findAllByIdTransIdAndIdPrsnRef(@Param("transid")String transId, @Param("prsnRef") String prsnRef);
}
春季靴子太棒了,它照顾好我。 让我们看......
当我尝试从数据库中获取所有记录时,除最终链接外,所有记录都是这样的
http://localhost:8080/person/com.----.Application.Methods.PersonCorePK@83e14116
这让我发疯了。我知道它在阅读我想要的内容,但却没有向我展示我需要的东西。我想帮助弄清楚如何转换“com.----.Application.Methods.PersonCorePK@83e14116”。它实际上应该显示该记录的transid。
请告诉我,无论如何我们都可以将这两个复合键添加到那个o / p格式中,因为我得到了我想要的所有数据,除了那两个对我来说很重要的数据。我不确定我可以在单个实体中使用两个@Id。但我会检查它。
答案 0 :(得分:2)
您拥有的是toString()
对象PersonCorePK
调用的输出。如果要更改此对象表示为String的方式,则需要覆盖PersonCorePK类的toString()
方法。像这样:
编辑:新的toString()方法。
@Override
public String toString() {
return "/search/findAllByIdTransIdAndIdPrsnRef?transId="+transId+"&prsnRef="+prsnRef;
}
我试过它对我有用。慢下来,确保你理解正在发生。另请注意,我使用大写(@Param("transid")
将(@Param("transId")
更改为I
。
另外,我为PersonCorePK添加了一个构造函数:
public PersonCorePK(String transId, String prsnRef) {
this.transId = transId;
this.prsnRef = prsnRef;
}
最后,当我测试应用程序时,我确保在Content-Type
请求中放置application/json
POST
,以便系统了解它正在接收的数据。
我使用Accessing JPA Data with REST作为指南。