主键自动生成功能不支持复合键和主键类。必须在代码中手动生成键值
一:
package com.titan.domain;
import javax.persistence.*;
@Entity
@IdClass(CustomerPK.class)
public class Customer implements java.io.Serializable {
private String firstName;
private String lastName;
private long ssn;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
@Id
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
@Id
public long getSsn() { return ssn; }
public void setSsn(long ssn) { this.ssn = ssn; }
}
package com.titan.domain;
public class CustomerPK implements java.io.Serializable {
private String lastName;
private long ssn;
public CustomerPK() {}
public CustomerPK(String lastName, long ssn)
{
this.lastName = lastName;
this.ssn = ssn;
}
public String getLastName() { return this.lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public long getSsn() { return ssn; }
public void setSsn(long ssn) { this.ssn = ssn; }
public boolean equals(Object obj)
{
if (obj == this) return true;
if (!(obj instanceof CustomerPK)) return false;
CustomerPK pk = (CustomerPK)obj;
if (!lastName.equals(pk.lastName)) return false;
if (ssn != pk.ssn) return false;
return true;
}
public int hashCode()
{
return lastName.hashCode() + (int)ssn;
}
}
二、
package com.titan.domain;
import javax.persistence.*;
@Entity
public class Customer implements java.io.Serializable {
private String firstName;
private CustomerPK pk;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="lastName", column=@Column(name="LAST_NAME")),
@AttributeOverride(name="ssn", column=@Column(name="SSN"))
})
public CustomerPK getPk() { return pk; }
public void setPk(CustomerPK pk) { this.pk = pk; }
@Transient
public String getLastName() { return pk.getLastName(); }
@Transient
public long getSsn() { return pk.getSsn(); }
}
package com.titan.domain;
import javax.persistence.*;
@Embeddable
public class CustomerPK implements java.io.Serializable
{
private String lastName;
private long ssn;
public CustomerPK() {}
public CustomerPK(String lastName, long ssn)
{
this.lastName = lastName;
this.ssn = ssn;
}
@Column(name="CUSTOMER_LAST_NAME")
public String getLastName() { return this.lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
@Column(name="CUSTOMER_SSN")
public long getSsn() { return ssn; }
public void setSsn(long ssn) { this.ssn = ssn; }
public boolean equals(Object obj)
{
if (obj == this) return true;
if (!(obj instanceof CustomerPK)) return false;
CustomerPK pk = (CustomerPK)obj;
if (!lastName.equals(pk.lastName)) return false;
if (ssn != pk.ssn) return false;
return true;
}
public int hashCode()
{
return lastName.hashCode() + (int)ssn;
}
}