开发者

JPA mapping issue with composite key

开发者 https://www.devze.com 2023-02-06 10:32 出处:网络
I have a below mapping @Entity @Table(name = \"auctions\") public class Auction{ . . @OneToMany(cascade = CascadeType.ALL, mappedBy = \"auction开发者_JS百科\")

I have a below mapping

@Entity
@Table(name = "auctions")
public class Auction{
.
.
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "auction开发者_JS百科")
    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 persist auction I am getting below 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


For Auction - AuctionParamValue relationship you 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;

     ...
}

Regarding AuctionParam I'm not sure what kind of relationship you want to express.

You can find a complete set of examples of derived identities' mappings (i.e. composite keys with foreign keys inside them) in JPA 2.0 specification, section 2.4.1.3.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号