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);
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;
}