java - JPA - @OneToMany with JoinTable -


i hope can explain first attempt. have 2 entities: person , address. 1 person can have many addresses, person entity composed of list of addresses. note addresses can shared among different people, address entity not need reference person entity. also, each address entity have rank attribute.

my table structure follows:

person (   person_id,   etc,   primary key (person_id) )  address (   address_id,   etc,   primary key (address_id) )  person_address_map (   person_id,   address_id,   rank,   foreign key (person_id) references person (person_id),   foreign key (address_id) references address (address_id),   primary key (person_id, address_id, rank) ) 

given above, i'm not sure how annotate list of addresses in person, or rank attribute in address. suspect person follows:

@entity public class person {   @onetomany(cascade = cascadetype.all, fetch=fetchtype.eager)   @jointable(name="person_address_map", joincolumns=@joincolumn(name="person_id"), inversejoincolumns=@joincolumn(name="address_id") )   private list<address> addresses;   ... } 

i'm clueless on how annotate rank in address entity.

thanks in advance

first of all, logical association between person , address many-to-many, since person has many addresses, , address shared many persons.

the rank, say, property of address. given address, rank can 1 (for bob) or 2 (for mary). shows (and table model shows clearly) rank not property of address.

so, solution problem simple: have map person_address_map table entity:

public class person {     @onetomany(mappedby = "person")     private set<rankedaddress> rankedaddresses; }  public class rankedaddress {     @manytoone     private person person;      @manytoone     private address address; }  public class address {     @onetomany(mappedby = "adress")     private set<rankedaddress> rankedaddresses; } 

i advise you, entities, add single-column, auto-generated id (and corresponding column) rankedaddress entity.

if rank additional of join table, , if it's used contain index of each address in person's address list (i.e. goes 0 n - 1, n being number of addresses of user), there alternative, doesn't force map join table entity:

public class person {     @manytomany     @ordercolumn(name = "rank")     private list<address> addresses; } 

note value of column handled jpa, , used store every address @ given index in list. won't available queries, , won't able know rank of person's address, other getting index in list.


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -