Reputation: 4891
I have SpringBoot project with Spring Data. Extra column being created when I use the same column name for 2 tables mapped using ManyToOne Relation. I have Address table with column name 'id' and AddressType table with column 'id'. When I start the Spring Boot application with this, I see an extra column (address_id) created on Address table.
Address.java
package com.springtesting.model;
import lombok.Data;
import javax.persistence.*;
@Entity
@Data
@Table(name = "address")
public class Address
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "street_name")
private String streetName;
@Column(name = "apartment")
private String apartment;
@Column(name = "city")
private String city;
@Column(name = "state")
private String state;
@Column(name = "country")
private String country;
@Column(name = "zip_code")
private String zipCode;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_type_id")
private AddressType addressType;
public Address()
{
}
public Address(String streetName, String apartment, String city, String state, String country, String zipCode, AddressType addressType)
{
this.streetName = streetName;
this.apartment = apartment;
this.city = city;
this.state = state;
this.country = country;
this.zipCode = zipCode;
this.addressType = addressType;
}
}
and
AddressType.java
package com.springtesting.model;
import lombok.Data;
import lombok.NonNull;
import javax.persistence.*;
@Entity
@Data
@Table(name = "address_type")
public class AddressType
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "type")
@NonNull
private String type;
public AddressType()
{
}
public AddressType(String type)
{
}
}
when I start the Spring Boot application, I see extra column (address_id)
Upvotes: 0
Views: 465
Reputation: 783
I'm not sure this will fix your issue, but try changing the @GeneratedValue(strategy = GenerationType.AUTO)
to @GeneratedValue(strategy = GenerationType.IDENTITY)
, or give it a "native" GenericGenerator
, as discussed here. Apparently GenerationType.AUTO
does not play nice with MySQL from Hibernate 5+.
A couple of other notes:
You probably don't want to use Lombok's @NonNull
, instead just use @Column(name = "type", nullable = false)
. In fact if the POJO is created through the default constructor, Lombok's @NonNull
wouldn't do anything anyway since it's annotated over a field.
You don't need the cascade = CascadeType.ALL
above the AddressType since you probably don't want to accidentally update/delete/or create new AddressType
s through the Address
entity. Just annotating it @ManyToOne
should be enough.
Upvotes: 0