需要更改spring数据jpa中一对多和多对一映射中的默认联接列
我正在使用SpringDataJPA,希望更改实体之间发生的默认联接列。例如,在以下映射中 在Account.java中需要更改spring数据jpa中一对多和多对一映射中的默认联接列,spring,hibernate,spring-mvc,spring-data,spring-data-jpa,Spring,Hibernate,Spring Mvc,Spring Data,Spring Data Jpa,我正在使用SpringDataJPA,希望更改实体之间发生的默认联接列。例如,在以下映射中 在Account.java中 @OneToMany(mappedBy = "account") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) private Set<Invoice> invoices = new HashSet<>(); 默认情况下,Account的id列将根据给定的
@OneToMany(mappedBy = "account")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Invoice> invoices = new HashSet<>();
默认情况下,Account
的id
列将根据给定的一对多和多对一映射与Invoice
的Account\u id
连接,这对我来说也很好。但是现在我的要求是,在我的一对多和多对一映射中,Invoice
中的account\u id
不是加入account
的id
而是加入account
的id
,而是加入id
。可能吗?作为试验,我对我的发票做了以下更改
@ManyToOne
@JoinColumn(name="account_number", nullable=false)
private Account account;
但我得到了以下错误:
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.trace.domain.Invoice column: account_number (should be mapped with insert="false" update="false")
Account.java
/**
* Account
*/
@Entity
@Table(name = "account")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Column(name = "number", nullable = false)
private String number;
@NotNull
@Column(name = "name")
private String name;
@Column(name = "currency_code")
private String currencyCode;
@Column(name = "edi_type")
private String ediType;
@Column(name = "is_fedex_express_gsr")
private Boolean isFedexExpressGsr;
@Column(name = "is_fedex_ground_gsr")
private Boolean isFedexGroundGsr;
@Column(name = "is_ups_gsr")
private Boolean isUpsGsr;
@Column(name = "electronic_voiding")
private Boolean electronicVoiding;
@Column(name = "activate_signature_service")
private Boolean activateSignatureService;
@Column(name = "reject_invoices")
private Boolean rejectInvoices;
@Column(name = "notify_client_services")
private Boolean notifyClientServices;
@Column(name = "is_active")
private Boolean isActive;
@Column(name = "address")
private String address;
@Column(name = "city")
private String city;
@Column(name = "state")
private String state;
@Column(name = "postal_code")
private String postalCode;
@OneToMany(mappedBy = "account")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Invoice> invoices = new HashSet<>();
@ManyToOne
private Courier courier;
@ManyToOne
private Client client;
@ManyToMany
@JoinTable(
name = "account_group_members",
joinColumns = {@JoinColumn(name = "account_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "group_id", referencedColumnName = "id")})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<AccountGroup> accountGroups = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCurrencyCode() {
return currencyCode;
}
public void setCurrencyCode(String currencyCode) {
this.currencyCode = currencyCode;
}
public String getEdiType() {
return ediType;
}
public void setEdiType(String ediType) {
this.ediType = ediType;
}
public Boolean getIsFedexExpressGsr() {
return isFedexExpressGsr;
}
public void setIsFedexExpressGsr(Boolean isFedexExpressGsr) {
this.isFedexExpressGsr = isFedexExpressGsr;
}
public Boolean getIsFedexGroundGsr() {
return isFedexGroundGsr;
}
public void setIsFedexGroundGsr(Boolean isFedexGroundGsr) {
this.isFedexGroundGsr = isFedexGroundGsr;
}
public Boolean getIsUpsGsr() {
return isUpsGsr;
}
public void setIsUpsGsr(Boolean isUpsGsr) {
this.isUpsGsr = isUpsGsr;
}
public Boolean getElectronicVoiding() {
return electronicVoiding;
}
public void setElectronicVoiding(Boolean electronicVoiding) {
this.electronicVoiding = electronicVoiding;
}
public Boolean getActivateSignatureService() {
return activateSignatureService;
}
public void setActivateSignatureService(Boolean activateSignatureService) {
this.activateSignatureService = activateSignatureService;
}
public Boolean getRejectInvoices() {
return rejectInvoices;
}
public void setRejectInvoices(Boolean rejectInvoices) {
this.rejectInvoices = rejectInvoices;
}
public Boolean getNotifyClientServices() {
return notifyClientServices;
}
public void setNotifyClientServices(Boolean notifyClientServices) {
this.notifyClientServices = notifyClientServices;
}
public Boolean getIsActive() {
return isActive;
}
public void setIsActive(Boolean isActive) {
this.isActive = isActive;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public Courier getCourier() {
return courier;
}
public void setCourier(Courier courier) {
this.courier = courier;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Set<Invoice> getInvoices() {
return invoices;
}
public void setInvoices(Set<Invoice> invoices) {
this.invoices = invoices;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Account shipper = (Account) o;
if (!Objects.equals(id, shipper.id))
return false;
return true;
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
@Override
public String toString() {
return "Account{" + "id=" + id + ", number='" + number + "'" + ", name='" + name + "'" + ", currencyCode='"
+ currencyCode + "'" + ", ediType='" + ediType + "'" + ", isFedexExpressGsr='" + isFedexExpressGsr + "'"
+ ", isFedexGroundGsr='" + isFedexGroundGsr + "'" + ", isUpsGsr='" + isUpsGsr + "'"
+ ", electronicVoiding='" + electronicVoiding + "'" + ", activateSignatureService='"
+ activateSignatureService + "'" + ", rejectInvoices='" + rejectInvoices + "'"
+ ", notifyClientServices='" + notifyClientServices + "'" + ", isActive='" + isActive + "'"
+ ", address='" + address + "'" + ", city='" + city + "'" + ", state='" + state + "'" + ", postalCode='"
+ postalCode + "'" + '}';
}
}
/**
*帐目
*/
@实体
@表(name=“account”)
@缓存(用法=缓存并发策略。非严格读写)
公共类帐户实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@NotNull
@列(name=“number”,null=false)
私有字符串编号;
@NotNull
@列(name=“name”)
私有字符串名称;
@列(名称=“货币代码”)
私有字符串代码;
@列(name=“edi\U类型”)
私有字符串编辑类型;
@列(name=“is\U fedex\U express\U gsr”)
私有布尔值isFedexExpressGsr;
@列(name=“is\U fedex\U ground\U gsr”)
私有布尔值isFedexGroundGsr;
@列(name=“is\u ups\u gsr”)
私有布尔isUpsGsr;
@列(名称=“电子作废”)
私有布尔电子;
@列(name=“激活签名服务”)
私有布尔激活签名服务;
@列(name=“拒绝发票”)
私人发票;
@列(name=“通知客户服务”)
私有客户端服务;
@列(name=“处于活动状态”)
私有布尔非活动;
@列(name=“address”)
私有字符串地址;
@列(name=“city”)
私人城市;
@列(name=“state”)
私有字符串状态;
@列(名称=“邮政编码”)
专用字符串后代码;
@OneToMany(mappedBy=“账户”)
@缓存(用法=缓存并发策略。非严格读写)
私有集发票=新HashSet();
@许多酮
私人快递;
@许多酮
私人客户;
@许多
@可接合(
name=“账户\集团\成员”,
joinColumns={@JoinColumn(name=“account\u id”,referencedColumnName=“id”)},
inverseJoinColumns={@JoinColumn(name=“group\u id”,referencedColumnName=“id”)}
@缓存(用法=缓存并发策略。非严格读写)
private Set accountGroups=new HashSet();
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getNumber(){
返回号码;
}
公共无效集合号(字符串号){
这个数字=数字;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getCurrencyCode(){
返回货币代码;
}
公共无效setCurrencyCode(字符串currencyCode){
this.currencyCode=currencyCode;
}
公共字符串getEditType(){
返回编辑类型;
}
public void setEdiType(字符串ediType){
this.ediType=ediType;
}
公共布尔getIsFedexExpressGsr(){
返回isFedexExpressGsr;
}
公共void集isFedexExpressGsr(布尔值isFedexExpressGsr){
this.isFedexExpressGsr=isFedexExpressGsr;
}
公共布尔getIsFedexGroundGsr(){
返回isFedexGroundGsr;
}
公共无效集isFedexGroundGsr(布尔值isFedexGroundGsr){
this.isFedexGroundGsr=isFedexGroundGsr;
}
公共布尔getIsUpsGsr(){
返回isUpsGsr;
}
公共空集合isUpsGsr(布尔isUpsGsr){
this.isUpsGsr=isUpsGsr;
}
公共布尔GetElectronicVoiling(){
返回电子排版;
}
公共作废设置电子作废(布尔电子作废){
这个。电子作废=电子作废;
}
公共布尔值getActivateSignatureService(){
返回activateSignatureService;
}
public void setActivateSignatureService(布尔activateSignatureService){
this.activateSignatureService=activateSignatureService;
}
公共布尔getRejectInvoices(){
退货发票;
}
公共作废setRejectInvoices(布尔rejectInvoices){
this.rejectInvoices=拒绝发票;
}
公共布尔getNotifyClientServices(){
返回notifyClientServices;
}
public void setNotifyClientServices(布尔notifyClientServices){
this.notifyClientServices=notifyClientServices;
}
公共布尔getIsActive(){
回报是积极的;
}
public void setIsActive(布尔值isActive){
this.isActive=isActive;
}
公共字符串getAddress(){
回信地址;
}
公共无效设置地址(字符串地址){
this.address=地址;
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
公共字符串getState(){
返回状态;
}
公共无效设置状态(字符串状态){
this.state=状态;
}
公共字符串getPostalCode(){
返回后代码;
}
公共无效setPostalCode(字符串postalCode){
this.postalCode=postalCode;
}
公共信使{
退货快递;
}
公共信使(信使信使信使){
这是我的信使=
/**
* Account
*/
@Entity
@Table(name = "account")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@Column(name = "number", nullable = false)
private String number;
@NotNull
@Column(name = "name")
private String name;
@Column(name = "currency_code")
private String currencyCode;
@Column(name = "edi_type")
private String ediType;
@Column(name = "is_fedex_express_gsr")
private Boolean isFedexExpressGsr;
@Column(name = "is_fedex_ground_gsr")
private Boolean isFedexGroundGsr;
@Column(name = "is_ups_gsr")
private Boolean isUpsGsr;
@Column(name = "electronic_voiding")
private Boolean electronicVoiding;
@Column(name = "activate_signature_service")
private Boolean activateSignatureService;
@Column(name = "reject_invoices")
private Boolean rejectInvoices;
@Column(name = "notify_client_services")
private Boolean notifyClientServices;
@Column(name = "is_active")
private Boolean isActive;
@Column(name = "address")
private String address;
@Column(name = "city")
private String city;
@Column(name = "state")
private String state;
@Column(name = "postal_code")
private String postalCode;
@OneToMany(mappedBy = "account")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Invoice> invoices = new HashSet<>();
@ManyToOne
private Courier courier;
@ManyToOne
private Client client;
@ManyToMany
@JoinTable(
name = "account_group_members",
joinColumns = {@JoinColumn(name = "account_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "group_id", referencedColumnName = "id")})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<AccountGroup> accountGroups = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCurrencyCode() {
return currencyCode;
}
public void setCurrencyCode(String currencyCode) {
this.currencyCode = currencyCode;
}
public String getEdiType() {
return ediType;
}
public void setEdiType(String ediType) {
this.ediType = ediType;
}
public Boolean getIsFedexExpressGsr() {
return isFedexExpressGsr;
}
public void setIsFedexExpressGsr(Boolean isFedexExpressGsr) {
this.isFedexExpressGsr = isFedexExpressGsr;
}
public Boolean getIsFedexGroundGsr() {
return isFedexGroundGsr;
}
public void setIsFedexGroundGsr(Boolean isFedexGroundGsr) {
this.isFedexGroundGsr = isFedexGroundGsr;
}
public Boolean getIsUpsGsr() {
return isUpsGsr;
}
public void setIsUpsGsr(Boolean isUpsGsr) {
this.isUpsGsr = isUpsGsr;
}
public Boolean getElectronicVoiding() {
return electronicVoiding;
}
public void setElectronicVoiding(Boolean electronicVoiding) {
this.electronicVoiding = electronicVoiding;
}
public Boolean getActivateSignatureService() {
return activateSignatureService;
}
public void setActivateSignatureService(Boolean activateSignatureService) {
this.activateSignatureService = activateSignatureService;
}
public Boolean getRejectInvoices() {
return rejectInvoices;
}
public void setRejectInvoices(Boolean rejectInvoices) {
this.rejectInvoices = rejectInvoices;
}
public Boolean getNotifyClientServices() {
return notifyClientServices;
}
public void setNotifyClientServices(Boolean notifyClientServices) {
this.notifyClientServices = notifyClientServices;
}
public Boolean getIsActive() {
return isActive;
}
public void setIsActive(Boolean isActive) {
this.isActive = isActive;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public Courier getCourier() {
return courier;
}
public void setCourier(Courier courier) {
this.courier = courier;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Set<Invoice> getInvoices() {
return invoices;
}
public void setInvoices(Set<Invoice> invoices) {
this.invoices = invoices;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Account shipper = (Account) o;
if (!Objects.equals(id, shipper.id))
return false;
return true;
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
@Override
public String toString() {
return "Account{" + "id=" + id + ", number='" + number + "'" + ", name='" + name + "'" + ", currencyCode='"
+ currencyCode + "'" + ", ediType='" + ediType + "'" + ", isFedexExpressGsr='" + isFedexExpressGsr + "'"
+ ", isFedexGroundGsr='" + isFedexGroundGsr + "'" + ", isUpsGsr='" + isUpsGsr + "'"
+ ", electronicVoiding='" + electronicVoiding + "'" + ", activateSignatureService='"
+ activateSignatureService + "'" + ", rejectInvoices='" + rejectInvoices + "'"
+ ", notifyClientServices='" + notifyClientServices + "'" + ", isActive='" + isActive + "'"
+ ", address='" + address + "'" + ", city='" + city + "'" + ", state='" + state + "'" + ", postalCode='"
+ postalCode + "'" + '}';
}
}
/**
* A Invoice.
*/
@Entity
@Table(name = "invoice")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Invoice implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "account_number")
private String accountNumber;
@Column(name = "invoice_number")
private String invoiceNumber;
@Column(name = "invoice_amount")
private Double invoiceAmount;
@Column(name = "status")
private String status;
@Column(name = "edi_number")
private String ediNumber;
@Column(name = "bill_date")
private Date billDate;
@Column(name = "courier_id")
private Long courierId;
@ManyToOne
@JoinColumn(name="account_number", nullable=true)
private Account account;
@OneToMany(mappedBy = "invoice")
//@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<InvoiceDetails> invoiceDetailss = new HashSet<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
public String getInvoiceNumber() {
return invoiceNumber;
}
public void setInvoiceNumber(String invoiceNumber) {
this.invoiceNumber = invoiceNumber;
}
public Double getInvoiceAmount() {
return invoiceAmount;
}
public void setInvoiceAmount(Double invoiceAmount) {
this.invoiceAmount = invoiceAmount;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getEdiNumber() {
return ediNumber;
}
public void setEdiNumber(String ediNumber) {
this.ediNumber = ediNumber;
}
public Date getBillDate() {
return billDate;
}
public void setBillDate(Date billDate) {
this.billDate = billDate;
}
public Long getCourierId() {
return courierId;
}
public void setCourierId(Long courierId) {
this.courierId = courierId;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public Set<InvoiceDetails> getInvoiceDetailss() {
return invoiceDetailss;
}
public void setInvoiceDetailss(Set<InvoiceDetails> invoiceDetailss) {
this.invoiceDetailss = invoiceDetailss;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Invoice invoice = (Invoice) o;
if ( ! Objects.equals(id, invoice.id)) return false;
return true;
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
@Override
public String toString() {
return "Invoice{" +
"id=" + id +
", accountNumber='" + accountNumber + "'" +
", invoiceNumber='" + invoiceNumber + "'" +
", invoiceAmount='" + invoiceAmount + "'" +
", ediNumber='" + ediNumber + "'" +
", status='" + status + "'" +
", billDate='" + billDate + "'" +
", courierId='" + courierId + "'" +
'}';
}
}
@Column(name = "account_number")
private String accountNumber;