Search code examples
javapostgresqljoinormeclipselink

How to insert data in a join table with postgreSQL and java eclipselink?


I have 3 tables in my database:

create table characters(
name varchar(255) primary key,
class varchar(55) NOT NULL,
race varchar(55) not null,
level int not null
);

create table users(
user_name varchar(255) primary key,
balance int not null,
first_name varchar(255) not null,
last_name varchar(255) not null,
iban varchar(255) not null,
character_slots int not null,
last_payment date not null,
months_payed int not null,
password varchar(255) not null,
banned varchar(1) not null
);

create table owns(
name varchar(255) references characters(name),
user_name varchar(255) references users(user_name)
);

As you can see the table "owns" is a join table.

I am working with java eclipselink. when i insert data in Users and Characters, nothings happens in "owns" table.

I can't insert data manually in java, because it only shows me the Users.java and Characters.java classes. In my Character.java class i see this code, maybe this will help you to find the solution i need.

@JoinTable(name = "owns", joinColumns = {
    @JoinColumn(name = "name", referencedColumnName = "name")}, inverseJoinColumns = {
    @JoinColumn(name = "user_name", referencedColumnName = "user_name")})
@ManyToMany
private Collection<Users> usersCollection;

The way i insert values in my database is like this:

Characters c1 = new Characters(t_char.getText(), cb_class.getValue(), cb_race.getValue(), 1);
persist(c1);

Solution

  • edit yours mapping:

    @JoinTable(name = "owns", joinColumns = {
    @JoinColumn(name = "name", referencedColumnName = "name")}, inverseJoinColumns = {
    @JoinColumn(name = "user_name", referencedColumnName = "user_name")})
    @ManyToMany(mappedBy = "user")
    private Collection<Users> usersCollection;
    

    and your "user" should be:

    @ManyToOne
    @JoinTable(name = "owns", joinColumns = {
    @JoinColumn(name = "name", referencedColumnName = "name")}, inverseJoinColumns = {
    @JoinColumn(name = "user_name", referencedColumnName = "user_name")})
    public User getUser() {
        return user;
    }