3

エンティティマッピングにビジネスキーを追加するのは少し混乱しています。すべてのエンティティはLongをIDとして使用しますが、複合IDを作成する必要があります。疑問は、@ Idと@EmbeddedIdを一緒に混合できますか、それとも埋め込みオブジェクトのみがIdのみである必要がありますか?

コードは次のとおりです。

@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractEntity implements Serializable {
/**
 * 
 */
private static final long serialVersionUID = 6891295574206401221L;

@Id
@GenericGenerator(
        name = "seq_id",
        strategy = "br.com.alianca.customerservicemacros.entity.AliancaSequenceGenerator")
@GeneratedValue(generator = "seq_id")
private Long id;

@Column(name = "dt_created")
private Date created;

@Column(name = "dt_altered")
private Date altered;

埋め込み可能なクラス:

@Embeddable
public class DacsInfo implements Serializable {
/**
 * 
 */
private static final long serialVersionUID = 5960251258518073347L;

/**
 * Código Docsys do Navio
 */
@Column(name = "COD_VESSEL", length = 4)
private String vessel;

/**
 * Código do navio.
 */
@Column(name = "NUM_VOYAGE", length = 5)
private String voyage;

/**
 * Primeiros 4 digitos do código do <code>BLUI</code>.
 */
@Column(name = "PREFIX_BLUI", length = 4)
private String prefixBlui;

/**
 * Número universal do BL.
 */
@Column(name = "NUM_BLUI", length = 12)
private String blui;

そしてここで最後のエンティティ:

@Entity
@Table(name = "FATO_DACS_REPT", schema = "u_cs_service")
public class FatoDacsRept extends AbstractEntity {

/**
 * 
 */
private static final long serialVersionUID = 9148311315020469420L;

@EmbeddedId
private DacsInfo dacsInfo;

@Column(name = "DAT_INPUT")
private Date loading;

/**
 * Código da companhia (Hamburg Sud - 699 / Aliança - 690)
 */
@Column(name = "COD_COMPANY", length = 4)
private String company;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "fatoDacsRept")
private List<FatoDacsReptChq> pendencias;
4

1 に答える 1

2

私はそうは思わない...

JPA 2.0最終仕様ページ373:

11.1.15EmbeddedIdアノテーション

..。

EmbeddedIdアノテーションを使用する場合は、EmbeddedIdアノテーションは1つだけで、Idアノテーションは使用しないでください。

..。

于 2013-01-15T23:42:44.547 に答える