gpt4 book ai didi

jpa - 将 EmbeddedId 与 Ebean 的 ManyToOne 映射结合使用时出现重复列

转载 作者:行者123 更新时间:2023-12-03 06:41:47 32 4
gpt4 key购买 nike

我有一个名为“EventCheckin”的模型,它具有到“事件”和“用户”的多对一映射。 “EventCheckin”表的PrimaryKey是用户的id和事件的id。我试图在我的 EventCheckin 模型中使用“EmbeddedId”来表示这一点,但是当我尝试保存 EventCheckin 时,它尝试将 user_id 和 event_id 值放入表中两次,这显然失败了:

Caused by: org.h2.jdbc.JdbcSQLException: Duplicate column name "USER_ID"; SQL statement:
insert into eventCheckin (event_id, user_id, latitude, longitude, user_id, event
_id) values (?,?,?,?,?,?) [42121-158]

EventCheckin 类:

@Entity
@Table(name="eventCheckin")
public class EventCheckin extends Model
{
@EmbeddedId public CheckinId id;

@MapsId("userId")
@JoinColumn(name="user_id")
@ManyToOne public User user;

@MapsId("eventId")
@JoinColumn(name="event_id")
@ManyToOne public Event event;

.....
}

CheckinId EmbeddedId 类::

@Embeddable 
public class CheckinId implements Serializable
{
public Long eventId;
public String userId;
.....
}

我的 EventCheckin 数据库表定义如下:

create table eventCheckin (
user_id varchar(255) not null,
event_id bigint not null,
latitude float,
longitude float,
constraint pk_eventCheckIn primary key (user_id,event_id),
foreign key (user_id) references user (email),
foreign key (event_id) references event (id)
);

最佳答案

看起来您尝试通过@MapsId和@EmbeddedId做同样的事情。一种(可行的)选择是选择 IdClass(等于、哈希码、额外属性等被删除):

    @Entity
public class User {
@Id public String id;
}

@Entity
public class Event {
@Id public long id;
}

public class CheckinId implements Serializable {
public Long event;
public String user;
}

@Entity
@IdClass(CheckinId.class)
@Table(name="eventCheckin")
public class EventCheckin {

@Id
@JoinColumn(name="user_id")
@ManyToOne public User user;

@Id
@JoinColumn(name="event_id")
@ManyToOne public Event event;
}

关于jpa - 将 EmbeddedId 与 Ebean 的 ManyToOne 映射结合使用时出现重复列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877296/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com