当前位置: 首页 > 面试题库 >

嵌套embeddable-AttributeOverride用于embeddable中的embeddable

蓝夕
2023-03-14
问题内容

我有班钱是@Embeddable

@Embeddable
public class Money implements Serializable, Comparable<Money> {
    @Column(name = "amount", precision = 15, scale = 2)
    private BigDecimal amount;
}

当我在实体中多次使用它时,一切正常。例如

@Entity
public class SomeEntity implements Serializable {

    @Embedded
    @AttributeOverride(name = "amount", column = @Column(name = "entry"))
    private Money entryValue;

    @Embedded
    @AttributeOverride(name = "amount", column = @Column(name = "leave"))
    private Money leaveValue;
}

上面的代码完美地工作。

现在,当我有另一个@Embeddable想要在其中包含Money实例并且该@Embeddable被实体多次使用时,就会出现问题。例:

  1. 嵌入

    @Embeddable
    

    public class ReportCostValues implements Serializable {

    @Embedded
    @AttributeOverride(name = "amount", column = @Column(name = "covered_by_grant"))
    private Money coveredByGrant;
    
    @Embedded
    @AttributeOverride(name = "amount", column = @Column(name = "own_resources"))
    private Money foundedFromOwnResources;
    
    @Embedded
    @AttributeOverride(name = "amount", column = @Column(name = "personal_contribution"))
    private Money personalContribution;
    
  2. 实体

     @Entity
    

    public class ReportCostEntity implements Identifiable , Serializable {

    @Id
    private Long id;
    
    @Embedded       
    private ReportCostValues contracted;
    
    @Embedded       
    private ReportCostValues current;
    
    @Embedded        
    private ReportCostValues previousReport;
    

上面的这段代码不起作用。任何想法如何解决这个问题?


问题答案:

嗨,您必须@AttributeOverrides司法使用,您必须在可嵌入ReportCostValues类中完成的实体中再次覆盖属性,希望下面的代码是您想要的。

@Entity 
public class ReportCostEntity implements  Serializable {

    @Id
    private Long id;

    @Embedded   
    @AttributeOverrides( {
        @AttributeOverride(name="coveredByGrant.amount", column = @Column(name="contracted_coveredByGrant") ),
        @AttributeOverride(name="foundedFromOwnResources.amount", column = @Column(name="contracted_foundedFromOwnResources")),
        @AttributeOverride(name="personalContribution.amount", column = @Column(name="contracted_personalContribution"))
    } )
    private ReportCostValues contracted;

    @Embedded
    @AttributeOverrides( {
        @AttributeOverride(name="coveredByGrant.amount", column = @Column(name="current_coveredByGrant") ),
        @AttributeOverride(name="foundedFromOwnResources.amount", column = @Column(name="current_foundedFromOwnResources")),
        @AttributeOverride(name="personalContribution.amount", column = @Column(name="current_personalContribution"))
    } )
    private ReportCostValues current;

    @Embedded 
    @AttributeOverrides( {
        @AttributeOverride(name="coveredByGrant.amount", column = @Column(name="previousReport_coveredByGrant") ),
        @AttributeOverride(name="foundedFromOwnResources.amount", column = @Column(name="previousReport_foundedFromOwnResources")),
        @AttributeOverride(name="personalContribution.amount", column = @Column(name="previousReport_personalContribution"))
    } )
    private ReportCostValues previousReport;




}

希望这可以帮助 !!!!!



 类似资料:
  • EJB 3.0提供了将JAVA POJO(Plain Old Java Object)嵌入到实体bean中的选项,并允许使用嵌入式POJO类的方法映射列名。 要嵌入的Java POJO必须注释为@Embeddable。 @Embeddable public class Publisher implements Serializable{ private String name; pri

  • Embeddable React Widget Easy creation of embeddable widgets - https://seriousben.github.io/embeddable-react-widget Features Full ES6/ES2015 support (with Babel) Package fonts, css, json, javascripts t

  • 问题内容: 我有一个具有以下结构的MySQL数据库(节选): 另外,还有一个USER表,但这并不重要,有了这些表,您可以了解问题的全貌。 如您所见,某些列具有将在类中变为的属性。 并且由于它们与其他表的关系而具有复合主键,因此我无法更改。由于为Composite ,因此映射的类必须具有一个带有相应类的。 问题是我需要在组合的 “本机” 部分中添加一个,例如:必须具有JPA @GeneratedVa

  • 问题内容: 我在Team和Player类之间有一种@OneToMany关系。我想在您的玩家之间保存一个Team对象。玩家的标识符由团队外键和列表索引组成,如下所示。我有一个这样的映射,因为我需要保存Team和您的Players同时吃饭。 所以,如果我使用以下 无论是否使用@ CollectionsOfElements,Player类都需要一个@Embeddable注释,而不是一个@Entity,这

  • 在我的应用程序中,我有一个场景,根据给定的输入代码和日期从实体中获取数据。代码和日期的组合将是唯一的,并将返回单个记录。 请建议。

  • 我将从@Embeddeble Class Certification中选择所有列。但我不能选择它。如何选择可嵌入类。 @嵌入式类认证 如果运行ResultService,则会出现以下异常: 原因:Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:异常描述:编译查询时出错[从认证c中选择c]。未知的实体类型[认证]。 如何