java - JPA : Additional fields in @JoinTable

标签 java jpa jboss ejb one-to-many

我正在尝试与 @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/

相关文章:

java - 使用 Cassandra Metrics 进行监控

spring - 如何将 [DDL] 从生成类型标识迁移到 postgres db 的生成类型序列

java - 在JPA中使用Native SQL描述表结构

java - 如何通过XSL FO加载图像

java - jboss如何使用localhost :8080/projectname without "projectname"?

java - 来自扫描仪的空白输入 - java

java - 是否可以将监听器添加到没有引用名称的对象?

java - 使用java aws sdk将文件从一个存储桶复制到另一存储桶

mysql - Hibernate 不生成唯一约束

Spring Security session 超时 - 清除浏览器缓存