Compound key JPA mapping error

I have the following mapping

@Entity
@Table(name = "auctions")
public class Auction{
.
.
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "auction")
    private List<AuctionParamValue> auctionParamValueList;
.
.
}


@Entity
@Table(name = "auction_param_values")
public class AuctionParamValue {

    @EmbeddedId
    protected AuctionParamValuePK auctionParamValuePK;

    @JoinColumn(name = "auction_param_id", referencedColumnName = "auction_param_id",updatable=false,insertable=false)
    @ManyToOne 
        private AuctionParam auctionParam;

    @JoinColumn(name = "auction_id", referencedColumnName  = "auction_id",updatable=false,insertable=false)
    @ManyToOne @MapsId("auctionId") 
        private Auction auction;
}

@Embeddable
public class AuctionParamValuePK {
    @Id 
    @Basic(optional = false)
    @Column(name = "auction_id")
    private long auctionId;

    @Id
    @Basic(optional = false)
    @Column(name = "auction_param_id")
    private int auctionParamId;
}

@Entity
@Table(name = "auction_params")    
public class AuctionParam {
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "auctionParam")
    private List<AuctionTypeParam> auctionTypeParamList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "auctionParam")
    private List<AuctionParamValue> auctionParamValueList;
 }

}

When I try to save an auction, I get below the error

 Internal Exception: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'auction_param_id' cannot be null
Error Code: 1048
Call: INSERT INTO auction_param_values (auction_param_val, create_ts, last_updt_ts, auction_param_id, auction_id) VALUES (?, ?, ?, ?, ?)
    bind => [500, 2011-01-25 20:11:01.22, 2011-01-25 20:11:01.22, null, null]
Query: InsertObjectQuery(com.eaportal.domain.AuctionParamValue[auctionParamValuePK=null])
Jan 25, 2011 8:11:01 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet dispatcher threw exception
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'auction_param_id' cannot be null
+3
source share
1 answer

For a relationship Auction- AuctionParamValueyou need to do this:

@Entity @Table(name = "auctions") 
public class Auction {
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "auction")
    private List<AuctionParamValue> auctionParamValueList;
    ...
}   

@Entity @Table(name = "auction_param_values")
public class AuctionParamValue {
     @EmbeddedId
     protected AuctionParamValuePK auctionParamValuePK;

     @ManyToOne @MapsId("auctionId")
     private Auction auction;

     ...
}

Relatively AuctionParamI'm not sure what kind of relationship you want to express.

In the JPA 2.0 specification, you can find a complete set of examples of mappings of derived identifiers (i.e., compound keys with foreign keys inside them) , section 2.4.1.3.

+5
source

Source: https://habr.com/ru/post/1787710/


All Articles