Java Spring数据Jpa-复合主键问题

Java Spring数据Jpa-复合主键问题,java,hibernate,jpa,playframework,spring-data,Java,Hibernate,Jpa,Playframework,Spring Data,我已经使用PlaySpringDataJPA模板启动了一个项目 我在尝试将hibernate映射到使用复合主键的联接表时遇到了一些问题 我连接的数据库是一个现有的mysql数据库 请参阅下文: SQL: CREATE TABLE IF NOT EXISTS`text\u advisting`.`campaign\u item\u slot`( `活动项目id`BIGINT不为空, `广告槽id`BIGINT不为空, `active`TINYINT(1)不为NULL默认为TRUE, `date_

我已经使用PlaySpringDataJPA模板启动了一个项目

我在尝试将hibernate映射到使用复合主键的联接表时遇到了一些问题

我连接的数据库是一个现有的mysql数据库

请参阅下文:

SQL:

CREATE TABLE IF NOT EXISTS`text\u advisting`.`campaign\u item\u slot`(
`活动项目id`BIGINT不为空,
`广告槽id`BIGINT不为空,
`active`TINYINT(1)不为NULL默认为TRUE,
`date_created`DATETIME不为空,
`date_updated`DATETIME不为空,
主键(`campaign\u item\u id`、`advert\u slot\u id`),
索引'fk\U campaign\u item\u slots\u 2\u idx'('Adverted\u slots\u id'ASC),
约束`fk\U活动\U项目\U插槽\U 1`
外键(`campaign\u item\u id`)
参考“文本广告”。“活动项目”(“id”)
不删除任何操作
在没有行动的情况下,
约束'fk\U活动\U项目\U插槽\U 2`
外键(`advert\u slot\u id`)
引用“文本广告”。“广告时段”(“id”)
不删除任何操作
更新时(无操作)
引擎=InnoDB
默认字符集=utf8

COLLATE=utf8\u常规\u ci似乎是下面的配置为我做的:

activityItemSlot.java

封装模型;
导入java.io.Serializable;
导入java.sql.Timestamp;
导入javax.persistence.EmbeddedId;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.JoinColumn;
导入javax.persistence.JoinColumns;
导入javax.persistence.manytone;
导入javax.persistence.MapsId;
导入javax.persistence.Table;
@实体
@表(name=“活动项目插槽”)
公共类ActivitySlot实现可序列化{
@嵌入ID
私人活动项目Slotpk活动项目Slotpk;
@MapsId(“广告槽id”)
@连接柱({
@JoinColumn(name=“advert\u slot\u id”,referencedColumnName=“id”),
})
@多通广告;
@MapsId(“活动项目id”)
@连接柱({
@JoinColumn(name=“campaign\u item\u id”,referencedColumnName=“id”),
})
@多项活动项目;
私有布尔活动;
创建的私有时间戳日期;
私有时间戳日期_更新;
公共活动项目槽(){
超级();
//TODO自动生成的构造函数存根
}
公共活动项Slotpk getCampaignItemSlotPk(){
返回活动项slotpk;
}
public void setActivationItemsLotpk(ActivationItemsLotpk-ActivationItemsLotpk){
this.cavigationItemsLotpk=cavigationItemsLotpk;
}
公共布尔isActive(){
主动返回;
}
public void setActive(布尔激活){
这个.active=active;
}
公共时间戳getDate_created(){
创建的返回日期;
}
创建的公共无效设置日期(创建的时间戳日期){
this.date\u created=创建日期;
}
公共时间戳getDate_updated(){
更新返回日期;
}
公共无效设置日期更新(时间戳日期更新){
this.date\u updated=date\u updated;
}
公共广告槽getAdvertSlot(){
返回时隙;
}
公共无效设置广告槽(广告槽广告槽){
this.advertSlot=advertSlot;
}
公共活动项getCampaignItem(){
退货项目;
}
公共无效集合活动项(活动项活动项){
this.campaignItem=活动项目;
}

}
您将idClass和Embedded相结合的方式没有问题。我可以让你的代码工作。既然已经定义了模式,为什么要使用hibernate.hbm2ddl.auto。为什么不直接设置属性呢?谢谢ArunM运行代码。我在帖子中提供的配置根本不想为我工作。请看这篇文章的答案。