Extra column being created when I use same column name for two different tables connected through ManyToOne relationship
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)
Table Structure on Mysql
java spring spring-data-jpa spring-data
add a comment |
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)
Table Structure on Mysql
java spring spring-data-jpa spring-data
add a comment |
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)
Table Structure on Mysql
java spring spring-data-jpa spring-data
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)
Table Structure on Mysql
java spring spring-data-jpa spring-data
java spring spring-data-jpa spring-data
edited Nov 14 '18 at 22:35
Jadda
asked Nov 14 '18 at 21:24
JaddaJadda
242315
242315
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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 newAddressType
s through theAddress
entity. Just annotating it@ManyToOne
should be enough.
Your suggestions did not solve my issue.
– Jadda
Nov 15 '18 at 3:23
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53308936%2fextra-column-being-created-when-i-use-same-column-name-for-two-different-tables%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
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 newAddressType
s through theAddress
entity. Just annotating it@ManyToOne
should be enough.
Your suggestions did not solve my issue.
– Jadda
Nov 15 '18 at 3:23
add a comment |
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 newAddressType
s through theAddress
entity. Just annotating it@ManyToOne
should be enough.
Your suggestions did not solve my issue.
– Jadda
Nov 15 '18 at 3:23
add a comment |
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 newAddressType
s through theAddress
entity. Just annotating it@ManyToOne
should be enough.
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 newAddressType
s through theAddress
entity. Just annotating it@ManyToOne
should be enough.
answered Nov 15 '18 at 0:45
dyslexitdyslexit
167110
167110
Your suggestions did not solve my issue.
– Jadda
Nov 15 '18 at 3:23
add a comment |
Your suggestions did not solve my issue.
– Jadda
Nov 15 '18 at 3:23
Your suggestions did not solve my issue.
– Jadda
Nov 15 '18 at 3:23
Your suggestions did not solve my issue.
– Jadda
Nov 15 '18 at 3:23
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53308936%2fextra-column-being-created-when-i-use-same-column-name-for-two-different-tables%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown