Многие связи не могут изобразить внешние ключи в таблице ассоциаций - PullRequest
0 голосов
/ 30 мая 2018

Проблема после вставки я могу найти свои данные в моих таблицах клиентов и адресов. Но я не могу найти какие-либо данные в моей ассоциированной таблице: Customers_Addresses

Код

Клиентский объект

@ Entity @Table (name = "CUSTOMERS") открытый класс Customer реализует Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "IDCUSTOMER")
private Long idCustomer;

@Column(name = "NOM")
private String nom;

@Column(name = "PRENOM")
private String prenom;



@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(
        name = "CUSTOMERS_ADDRESSES",
        joinColumns = { @JoinColumn(name = "IDCUSTOMER")},
        inverseJoinColumns = {@JoinColumn(name = "IDADDRESS")}
        )
private List<Address> addresses = new ArrayList<>();

//constructor
public Customer() {
}

public Customer(Long idCustomer, String nom, String prenom){
    this.idCustomer = idCustomer;
    this.nom = nom;
    this.prenom = prenom;   
}

//getters and setters 
public List<Address> getAddresses() {
    return addresses;
}

public void setAddresses(List<Address> addresses) {
    this.addresses = addresses;
}

public String getNom() {
    return nom;
}
public void setNom(String nom) {
    this.nom = nom;
}
public String getPrenom() {
    return prenom;
}
public void setPrenom(String prenom) {
    this.prenom = prenom;
}
public Long getIdCustomer() {
    return idCustomer;
}
public void setIdCustomer(Long idCustomer) {
    this.idCustomer = idCustomer;
}

Address Entity

@ Entity @Table (name = "ADDRESSES") открытый класс Address реализует Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "IDADDRESS")
private Long idAddress;


@Column(name = "CITY")
private String city;

@Column(name = "COUNTRY")
private String country;

@ManyToMany(mappedBy ="addresses" )
private List<Customer> customers = new ArrayList<>();

public Address() {
}

public Address(Long idAddress, String city, String country){
    this.idAddress = idAddress;
    this.city = city;
    this.country = country; 
}

//Getters and setters 
public Long getIdAddress() {
    return idAddress;
}
public void setIdAddress(Long idAddress) {
    this.idAddress = idAddress;
}
public String getCountry() {
    return country;
}
public void setCountry(String country) {
    this.country = country;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public void setCustomers(List<Customer> customers) {
    this.customers = customers;
}

public List<Customer> getCustomers() {
    return customers;
}

Основной код

public class test {public static void main (String [] args) {// TODO Сгенерированный автоматически метод заглушки

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

AddressService addressService = (AddressService) context.getBean("addressServiceImpl");
CustomerService customerService = (CustomerService) context.getBean("customerServiceImpl");


Address address = new Address();
address.setCity("ddd");
address.setCountry("ddd");
addressService.insertAddress(address);


Address address1 = new Address();
address1.setCity("ddd");
address1.setCountry("ddd");
addressService.insertAddress(address1);

//customer  have two addreses
Customer customer = new Customer();
customer.setNom("ddd");
customer.setPrenom("ddd");
customerService.insertCustomer(customer);

customer.getAddresses().add(address);
customer.getAddresses().add(address1);

//Customer 1 have  1 adresses
Customer customer1 = new Customer();
customer1.setNom("ddd");
customer1.setPrenom("ddd");
customerService.insertCustomer(customer1);
customer1.getAddresses().add(address1);
}

Сценарий для таблицы ассоциации sql: Customers_Addresses

создать таблицу CUSTOMERS_ADDRESSES (IDCUSTOMER int не равен NULL, IDADDRESS int не равен NULL, первичный ключ (IDCUSTOMER, IDADDRESS), ключ fk_cust (IDCUSTOMER), ключ fk_add (IDADDRESS), ограничение fk_cust внешний ключ (IDCUSTOMER) ссылается на клиентов (противstraint fk_add внешний ключ (IDADDRESS) ссылается на адреса (IDADDRESS)

1 Ответ

0 голосов
/ 30 мая 2018

Основная причина, по которой вы не видите никакой информации в таблице объединения, заключается в том, что вы сохраняете запись до добавления данных таблицы объединения.См. Ваш код здесь:

customerService.insertCustomer(customer);

customer.getAddresses().add(address);
customer.getAddresses().add(address1);

Это вместо этого должно читаться:

customer.getAddresses().add(address);
customer.getAddresses().add(address1);
customerService.insertCustomer(customer);

Аналогично, ваш код также сталкивается с той же проблемой с вашим экземпляром customer1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...