Java 如何为列名设置不同的ID?

Java 如何为列名设置不同的ID?,java,playframework,Java,Playframework,具体来说,我有以下Java代码(类A和类B): //A类 包装模型; 导入java.util.*; 导入javax.persistence.*; 导入play.db.ebean.Model; @实体 @表(name=“A”) 公共A类扩展模型{ @身份证 @GeneratedValue(策略=GenerationType.SEQUENCE,generator=“id\u a\u seq”) @SequenceGenerator(name=“id_a_seq”,sequenceName=“id_a

具体来说,我有以下Java代码(类A和类B):

//A类
包装模型;
导入java.util.*;
导入javax.persistence.*;
导入play.db.ebean.Model;
@实体
@表(name=“A”)
公共A类扩展模型{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“id\u a\u seq”)
@SequenceGenerator(name=“id_a_seq”,sequenceName=“id_a_seq”)
@列(name=“ID_A”,insertable=true,updateable=true,unique=true,nullable=false)
公共整数id;
@列(name=“NOME”)
公共字符串名称;
@列(unique=true,name=“CPF”)
公共字符串cpf;
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name=“A_B”,
joinColumns={@JoinColumn(name=“ID_A”)},
inverseJoinColumns={@JoinColumn(name=“ID_B”)})
public List lista=new ArrayList();
}

//B类
包装模型;
导入java.util.*;
导入javax.persistence.*;
导入play.db.ebean.Model;
@实体
@表(name=“B”)
公共类B扩展模型{
公共B(){}
公共B(整数id,字符串名称){
this.id=id;
this.nome=nome;
}
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“id_b_seq”)
@SequenceGenerator(name=“id_b_seq”,sequenceName=“id_b_seq”)
//@属性覆盖(name=“id”,column=@column(name=“id\u B”))
@列(name=“ID_B”,insertable=true,updateable=true,unique=true,nullable=false)
公共整数id;
@列(name=“NOME”)
公共字符串名称;
@许多(mappedBy=“lista”)
public List lista=new ArrayList();
}

在浏览器中运行localhost:9000时,会收到以下错误消息:

“PersistenceException:[models.B.lista]上的联接出错。找不到[ID_B]的本地匹配项,可能是@JoinColumn中出错。”


我可以将ID_A和ID_B重命名为ID来解决这个问题(两者都是),但是我无法获得ID列的名称ID(在表A和表B中)。我需要弄清楚如何播放以接受ID A和ID B名称作为其ID列名。

列表A
关系上的映射更改为:

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "A_B",
        joinColumns = {@JoinColumn(name = "ID_A", referencedColumnName = "ID_A")},
        inverseJoinColumns = {@JoinColumn(name = "ID_B", referencedColumnName = "ID_B")})
public List<B> lista = new ArrayList<B>();
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name=“A_B”,
joinColumns={@JoinColumn(name=“ID\u A”,referencedColumnName=“ID\u A”)},
inverseJoinColumns={@JoinColumn(name=“ID\u B”,referencedColumnName=“ID\u B”)})
public List lista=new ArrayList();
注意在
@JoinColumn
中添加了
referencedColumnName

参考:

在联接表注释中使用时,引用的键列位于所属图元的图元表中,如果联接是反向联接定义的一部分,则位于反向图元中


没问题。如果你认为我正确地回答了你的问题,你能接受吗?谢谢
//Class B
package models;
import java.util.*;
import javax.persistence.*;
import play.db.ebean.Model;

@Entity
@Table(name="B")
public class B extends Model {

    public B() {}
    public B(Integer id, String nome) {
        this.id = id;
        this.nome = nome;
    }
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_b_seq")
    @SequenceGenerator(name="id_b_seq", sequenceName="id_b_seq")
    //@AttributeOverride(name = "id", column = @Column(name = "ID_B"))
    @Column(name="ID_B", insertable=true, updatable=true, unique=true, nullable=false)
    public Integer id;

    @Column(name="NOME")
    public String nome;

    @ManyToMany(mappedBy="lista")
    public List<A> lista = new ArrayList<A>();
}
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "A_B",
        joinColumns = {@JoinColumn(name = "ID_A", referencedColumnName = "ID_A")},
        inverseJoinColumns = {@JoinColumn(name = "ID_B", referencedColumnName = "ID_B")})
public List<B> lista = new ArrayList<B>();