gpt4 book ai didi

java - JPA : Additional fields in @JoinTable

转载 作者:行者123 更新时间:2023-11-30 11:22:07 24 4
gpt4 key购买 nike

我正在尝试与 @JoinTable 创建一对多关系。代码可以工作并且可以执行它应该执行的操作,但是,有没有办法向连接表添加更多列?这将是一个需要某种历史记录的业务应用程序,因此我需要在创建/更新时使用 add_userupdate_usertimestamp 等字段连接表。有没有一种优雅的方法可以用 Java 做到这一点,而无需通过更改表来添加额外的字段?如果有,如何优雅地编辑该数据,假设我添加了新关系,如何更改提到的字段的值?我说优雅,因为你总是可以做一些丑陋的事情,在这种情况下 - 创建关系,然后通过两个 ID 更新该关系的字段,如果有的话我很感兴趣更漂亮,更像 Java,方式。

两个实体的代码:

@Entity
@Table(name="users")
public class Users {
int id;
String username;
private List<Jobs> jobs;

@OneToMany
@JoinTable(
name="users_jobs_rel",
joinColumns= @JoinColumn(name="user_id", referencedColumnName="user_id") ,
inverseJoinColumns= @JoinColumn(name="job_id", referencedColumnName="job_id")
)
public List<Jobs> getJobs() {
return jobs;
}
public void setJobs(List<Jobs> jobs) {
this.jobs = jobs;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "user_id", unique = true, nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}

@Entity
@Table(name="jobs")
public class Jobs {
int id;
String title;
@ManyToOne
private Users user;

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "job_id", unique = true, nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

@Column
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

提前致谢。

最佳答案

通常,当您使用多对多 时,您需要为这种关系创建额外的表。但是现在,我不知道为什么要使用一对多来创建新表(为什么?这是不必要的)。答案是肯定的,您可以使用 @JoinColumn 注释将一些额外的列加入到您的表中。如果你真的需要双向关系,请注意 :) 祝你好运

编辑:

Is there an elegant way to do this with Java, without adding additional 
fields through altering tables?

你说的“改变”是什么意思?难道你不让 Hibernate 使用 hbm2dll 自动创建它吗?

关于java - JPA : Additional fields in @JoinTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21881361/

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