标签: embeddable

我可以使嵌入式Hibernate实体不可为空吗?

我想要的是:

@Embedded(nullable = false)
private Direito direito;
Run Code Online (Sandbox Code Playgroud)

但是,正如您所知,@ Embeddable没有这样的属性.

有没有正确的方法来做到这一点?我不想要解决方法.

hibernate nullable embeddable

33
推荐指数
3
解决办法
2万
查看次数

Java ETL:很难找到合适的一个

我正在寻找一个可嵌入的Java ETL,即可以从Java代码调用的Extract Transform Load引擎.

我发现很难找到合适的产品.

我主要看的是将分隔的文本文件加载到数据库表中,并在此过程中进行一些小的转换.

我想要以下功能:

  • 能够在外部指定简单映射,例如,文本列5到数据库列foo,指定了一些xml映射文件
  • 能够为数据库节点提供javax.sql.Datasource

CloverETL允许在XML中指定映射,但数据库连接必须是JNDI名称或指定driverClass,url,dbusername,password等的属性文件.因为我已经javax.sql.Datasource通过我的依赖注入框架设置了,所以属性文件看起来很痛苦,不健壮的,特别是如果我想在多个环境(dev,test,prod)中工作.

KETL告诉我"我们目前正在全面检修KETL™的文档.因此,只有安装指南已经更新." 诚实,但没有帮助.

八达通现在是"http://www.together.at/prod/database/tdt",正在"正在建设中".

Pentaho 似乎使用与CloverETL相同的"指定driverClass"样式,而不是使用数据源,但Pentaho的文档用于从java代码调用它们的引擎很难找到.

基本上我真的很想能够做这个伪代码:

extractTransformLoad(         
        getInputFile( "input.csv" ) , 
        getXMLMapping( "myMappingFile.xml") ,
        new DatabaseWriter( getDatasource() );
Run Code Online (Sandbox Code Playgroud)

有什么建议?

java etl embeddable

23
推荐指数
2
解决办法
2万
查看次数

嵌套嵌入式 - AttributeOverride,用于嵌入嵌入式嵌入式

我有类Money是@Embeddable

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

当我在实体内部使用多次时,一切正常.例如

@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;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码完美无缺.

现在问题出现了,当我有另一个@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 = …
    Run Code Online (Sandbox Code Playgroud)

hibernate jpa embeddable

15
推荐指数
1
解决办法
2万
查看次数

Hibernate @Embeddable类扩展了另一个@Embeddable类,找不到@OneToMany映射的属性

我们正在将旧的基于xml的配置转换为基于注释的配置

情况

有一个类被注释为@Embeddable(ParentPk.java),另一个类扩展了这个类 @Embeddable(ChildPk.java),这个ChildPk.java被用作复合主键SomeOwnerClass.java,它与另一个类有外来关系,SomeChildTable.java并倾向于使用父类中可用的属性col1col2ChildPk.java,但在执行查询Hibernate没有发现COL1COL2,而如果我复制COL1COL2ChildPk.java从父类中的每一件事工作正常.

下面是代码片段,SomeOwnerClass.java它引用了col1col2

>  @OneToMany(orphanRemoval = true, fetch=FetchType.EAGER)
>        @Cascade(value = {CascadeType.ALL,CascadeType.SAVE_UPDATE})
>        @Fetch(FetchMode.JOIN)
>        @JoinColumns({
>        @JoinColumn(name="COL_1",insertable=false,updatable=false,referencedColumnName="COL_1"),
>        @JoinColumn(name="COL_2",insertable=false,updatable=false,referencedColumnName="COL_2"),
>        @JoinColumn(name="COL_3",insertable=false,updatable=false,referencedColumnName="COL_3"),
>     })    private Set<SomeChildTable> collection = new
> HashSet<SomeChildTable>();
Run Code Online (Sandbox Code Playgroud)

针对这种情况的解决方案?

ParentPk.java

 @Embeddable
    public class ParentPk implements Serializable  {

        @Column(name="COL_1")
        private String col1;

        @Column(ame="COL_2")
        private String col2;

    }
Run Code Online (Sandbox Code Playgroud)

ChildPk.java …

inheritance extends hibernate embeddable

15
推荐指数
2
解决办法
1万
查看次数

Embeddable类中的外键映射

我使用eclipselinkJPA.我有一个实体,它有一个由两个字段组成的复合键.以下是我的可嵌入主键类'字段(成员).

    @Embeddable
    public class LeavePK {
       @ManyToOne(optional = false)
       @JoinColumn(name = "staffId", nullable = false)
       private Staff staff;
       @Temporal(TemporalType.TIMESTAMP)
       private Calendar date;
       //setters and getters
    }
Run Code Online (Sandbox Code Playgroud)

我的实体将保留与员工相关的休假数据,因此我尝试将员工对象和离开日期结合起来以生成组合键.除了我的逻辑,它不允许我在embeddable类中有一个外键映射.当我尝试使用JPA工具 - >从实体生成表时,它会给出如下错误,这解释了,但我没有得到它.

org.eclipse.persistence.exceptions.ValidationException
Exception Description: The mapping [staff] from the embedded ID class [class rs.stapp.entity.LeavePK] is an invalid mapping for this class. An embeddable class that is used with an embedded ID specification (attribute [leavePK] from the source [class rs.stapp.entity.Leave]) can only contain …
Run Code Online (Sandbox Code Playgroud)

java entity-relationship jpa composite-key embeddable

12
推荐指数
1
解决办法
2万
查看次数

JPA/Hibernate OneToMany Mapping,使用复合PrimaryKey

我目前正在努力使用复合主键类的方案正确的映射注释.首先,我想用文字来实现:

我有2个类:group和FieldAccessRule.组可以有多个FieldAccessRules,而FieldAccessRule只有一个组分配.到目前为止,修改这个问题不是一个问题(简化):

public class Group{
    ...
    @OneToMany(mappedBy = "group")
    private Set<FieldAccessRule> fieldAccessRules;
    ... 
}
Run Code Online (Sandbox Code Playgroud)

并为FieldAccessRule:

public class FieldAccessRule {
    ...
    @ManyToOne
    @JoinColumn(name = "group_id")
    private Group group;
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我决定使用复合PK作为FieldAccessRule,因为规则对于ONE Group和ONE Field应该是唯一的.它看起来像这样:

@Embeddable
public class FieldAccessRulePK implements Serializable{
    private String fieldKey;
    private Group group;
    ...
}
Run Code Online (Sandbox Code Playgroud)

和ofc.FieldAccessRule需要更改为

public class FieldAccessRule {
    ...
    @EmbeddedId
    private FieldAccessRulePK fieldAccessRulePK;
    ...
}
Run Code Online (Sandbox Code Playgroud)

如何为Group的FieldAccessRuleSet创建正确的映射?这样做,我得到:

在属性"fieldAccessRules"中,"映射者"值"组"无法解析为目标实体上的>属性.

什么是创建从Group到PrimaryKey的PART的映射的正确方法?

编辑:我知道发现,使用

public class Group{
    ...
    @OneToMany(mappedBy = "fieldAccessRolePK.group")
    private Set<FieldAccessRule> fieldAccessRules;
    ... 
}
Run Code Online (Sandbox Code Playgroud)

完全按预期工作.它编译得很好,它可以很好地创建数据库,并且在加载具有预定义角色的组之后,它们可以按预期使用.

但是,Eclipse仍然说

在属性"fieldAccessRules"中,"映射的"值"fieldAccessRulePK.group"无法解析为目标实体上的属性.

我不确定,如果忽略错误并且"假设"每一件事情都很好......(我发现一个帖子,据说已经说过,Hibernate支持模式attr1.attr2的映射但不支持JPA确认. )

jpa one-to-many embeddable

12
推荐指数
1
解决办法
2万
查看次数

@Embedded对象如果没有基本数据类型字段,则不会自动实例化

基本问题:为什么@Embedded对象不会被实例化?

有趣的观察是,如果那些不包含基本数据类型(int,boolean ...)或之前未被触及的话,Ebean不会实例化@Embedded对象.例:

@Entity
public class Embedder {
    // getNotAutoInstantiated() will return null if this field was not touched before
    @Embedded
    private NotAutoInstantiated notAutoInstantiated = new NotAutoInstantiated();
    // getAutoInstantiated() will always return an instance!
    @Embedded
    private AutoInstantiated autoInstantiated = new AutoInstantiated();
}

@Embeddable
public class AutoInstantiated {
    // theKey is why this embedded object is always instantiated
    private int theKey; 
    private String field1;      
}

@Embeddable
public class NotAutoInstantiated {
    private String field2;      
}
Run Code Online (Sandbox Code Playgroud)

java jpa embeddable ebean

12
推荐指数
2
解决办法
5898
查看次数

将可嵌入字段设置为父实体映射的主键 - Doctrine2

TLDR; Doctrine2:我需要知道是否可以在Parent Entities(或MappedSuperclass')映射中将Embeddable中的字段设置为主键.我已经知道如何从Embeddable的映射中设置主键,但这并不理想(参见"长版本").

长版; 我正在尝试使用Doctrine2 Embeddables为我的实体创建身份值对象.

这是我的问题......

  • 我在实体(MyEntity)中有两个不同的Embeddables(MyEntityId和OtherEntityId).

  • 我希望MyEntityId中的一个字段成为MyEntity的主键.

  • 由于我在同一实体中有两个标识嵌入,我想在实体映射文件中定义主键字段而不是可嵌入映射.

  • 如果我在嵌入式中定义主键,那么当我想对OtherEntityId执行相同操作时遇到问题(因为我在其他地方使用它).

  • 映射MyEntityId和OtherEntityId中的主键导致MyEntity具有复合键,这是我不想要的.

这是我目前的映射......

MyEntity:
    embedded:
        MyEntityId:
            class: 'MyEntityId'
            columnPrefix: false
        OtherEntityId:
            class: 'OtherEntityId'
            columnPrefix: false

MyEntityId:
    type: 'embeddable'
        id: 
            id:
                column: 'MyEntityId'
                type: 'string'

OtherEntityId:
    type: 'embeddable'
        id: 
            id:
                column: 'OtherEntityId'
                type: 'string'
Run Code Online (Sandbox Code Playgroud)

解决方案?

  • 创建两个单独的Embeddables来表示相同的Id值对象(不是非常干燥和太复杂)

  • 从实体映射Embeddable的主键字段(这可能吗?我在文档中找不到它)

php embeddable doctrine-orm

9
推荐指数
1
解决办法
1367
查看次数

JPA SubGraph定义嵌入属性的fetchtype

我有一个实体Ride,它嵌入了一个可嵌入的"实体" 路径.路线有一个列表属性城镇与多对多的关系,所以它有fetchtype LAZY(我不希望使用EAGER).所以我想定义的实体NamedEntityGraph 平顺,加载加载一个物体路线与instantied名单城镇.但是当我部署战争时,我得到了这个例外:

java.lang.IllegalArgumentException:Attribute [route]不是托管类型

@Entity
@NamedQueries({
@NamedQuery(name = "Ride.findAll", query = "SELECT m FROM Ride m")})
@NamedEntityGraphs({
@NamedEntityGraph(
        name = "rideWithInstanciatedRoute",
        attributeNodes = {
            @NamedAttributeNode(value = "route", subgraph = "routeWithTowns")
        },
        subgraphs = {
            @NamedSubgraph(
                    name = "routeWithTowns",
                    attributeNodes = {
                        @NamedAttributeNode("towns")
                    }
            )
        }
    )
})
public class Ride implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = …
Run Code Online (Sandbox Code Playgroud)

java jpa embeddable jpa-2.1

7
推荐指数
1
解决办法
2292
查看次数

Hibernate交换可嵌入类来迁移现有数据

我在这里不知所措,也许这是显而易见的,因为我的Hibernate专业知识比其他领域弱.

在遗留代码中有一个Hibernate @EntityFoo.其中一个属性是:

private OldBar bar = new OldBar();
Run Code Online (Sandbox Code Playgroud)

OldBar是一个@Embeddable使用单个列的类,foobar:

@Embeddable
public class OldBar {

  private String fooBar;

  @Column(length = 10, nullable = false)
  private String getFooBar() {
    return fooBar;
  }

  @SuppressWarnings("unused")
  private void setFooBar(String fooBar) {
    this.fooBar = fooBar;
  }
}
Run Code Online (Sandbox Code Playgroud)

最初的问题是我需要做一些事情OldBar.fooBar,但原始设计有局限性,并将此字段设为私有,阻止我对其进行子类化,因此我必须创建一个完整的其他类NewBar,以替换另一个类并获取访问权限私人领域.我认为既然NewBarEmbeddable有相同的@Column名称,我可以在课堂上换掉这个字段Foo:

private NewBar bar = new NewBar();
Run Code Online (Sandbox Code Playgroud)

我想这样做是因为我在foobar列中有现有数据,我想透明地使用这些数据NewBar而不是OldBar.

通过我看到的跟踪日志,在调用构造函数时Foo()创建了默认版本NewBar() …

hibernate migrate embeddable

6
推荐指数
1
解决办法
250
查看次数