Joining three tables with @OneToMany association

Viewed 26
I have three tables.
1.Street (street_id, settlement_entity_id, street_name),
2.Settlement_entity (settlement_entity_id, settlement_id, settlement_name), for example could be community, regional, municipality.. and
3.Settlement (settlement_id, settlement_name), for example could be city, town, township, village....
Relation - Street - Settlement_entity = > onetomany
Relation - Settlement_entity - Settlement = > onetomany
  
I want when I enter the name of the street, I get the settlement entity as above 
as in parentheses and after that the settlement name with characteristics that are not to be the subject of this application, such as for example the house/apartment number, floor, longitude, latitude, altitude of the settlement.

entity
Street.java

package net.javaguides.springboot.entity;

@Entity
@Table(name = "street")
public class Street {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long street_id;

@Column(name = "street_name")
private String street_name;
    
public Street(String street_name) {
    super();
    this.street_name = street_name;
}

// getter and setters

entity 
Settlement_entity.java

            package net.javaguides.springboot.entity;
            
            import javax.persistence.Column;
            
            @Entity
            @Table(name = "settlement_entity")
            public class SettlementEntity {
            
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            private long settlement_entity_id;
            
            @Column(name = "settlement_entity_name")
            private String settlement_entity_name;
            
            public SettlementEntity(String settlement_entity_name) {
                super();
                    this.settlement_entity_name = settlement_entity_name;
                }
                
            // getters and setters
        
         
            
     

   public void setSettlement_entity_name(String settlement_entity_name) {
        this.settlement_entity_name = settlement_entity_name;
    }
    
    }

entity Settlement.java

package net.javaguides.springboot.entity;

import javax.persistence.Column;

@Entity
@Table(name = "settlement")
public class Settlement {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long settlement_id;

@Column(name = "settlement_name")
private String settlement_name;


public Settlement(String settlement_name) {
    super();
    this.settlement_name = settlement_name;
}

// getters and setters }

I creating according suggestion from -thelearner new linking entity which would be used for mapping that particular table.

entity linking table

StreetSettlementEntitySettlement.java

package net.javaguides.springboot.entity;

import javax.persistence.CascadeType;

public class StreetSettlementEntitySettlement {

@Id
@GeneratedValue
private long id;

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "street_id")
private Street street;

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "settlement_entity_id")
private SettlementEntity settlement_entity;

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "settlement")
private Settlement settlement;
    
public StreetSettlementEntitySettlement(long id, Street street, SettlementEntity 
settlement_entity, Settlement settlement) {
    super();
    this.id = id;
    this.street = street;
    this.settlement_entity = settlement_entity;
    this.settlement = settlement;
}

   
}

Directory structure

I saw some proposal from thelearner like this:

It's not clear for me and don't understanding. Where should I put those three classes or should do something else. Repo's is clear. Any help and explanation would be appreciated. Thank you

0 Answers
Related