标签: one-to-one

需要一个Hibernate中主键@OneToOne映射的示例

有人可以给我一个Hibernate中单向@OneToOne主键映射的例子吗?我尝试了很多种组合,到目前为止,我得到的最好的东西是:

@Entity
@Table(name = "paper_cheque_stop_metadata")
@org.hibernate.annotations.Entity(mutable = false)
public class PaperChequeStopMetadata implements Serializable, SecurityEventAware {

private static final long serialVersionUID = 1L;

@Id
@JoinColumn(name = "paper_cheque_id")
@OneToOne(cascade = {}, fetch = FetchType.EAGER, optional = false, targetEntity = PaperCheque.class)
private PaperCheque paperCheque;
}
Run Code Online (Sandbox Code Playgroud)

每当Hibernate尝试自动生成上述映射的模式时,它会尝试将主键创建为blob,而不是long,即PaperCheque的id类型.有人能帮帮我吗 ?如果我无法得到一个确切的解决方案,那么接近就会有所作为,但我会感激任何回应.

java annotations hibernate one-to-one

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

在SQL/MySQL中,有没有理由不在同一个表中放置一对一的关系?

一对一的关系通常可以存储在同一个表中.有没有理由不把它们存放在同一张桌子上?

mysql sql database-design one-to-one schema-design

5
推荐指数
1
解决办法
314
查看次数

使用@OneToOne注释从表中删除

我正在使用JPA2和Hibernate实现.

我有这样的简单映射:

@Entity 
class Topic {

    @Id
    @GeneratedValue(strategy = IDENTITY)

    int id;

   @OneToOne(cascade = ALL)
   @JoinColumn(name = "id_poll")
   private Poll poll;

}

@Entity 
class Poll {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    int id;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我删除一个也在Topic中的Poll对象时,我收到一个错误.

java.sql.SQLException:完整性约束违规FKCC42D924982D3F4B表:语句中的TOPICS [从民意调查中删除id =?]

我理解这是因为如果Poll记录在另一个表中有引用,我就无法删除它.我怎么解决这个问题?我是否必须在主题表中手动设置poll = null或者是否有更好的解决方案?

hibernate cascade one-to-one jpa-2.0

5
推荐指数
1
解决办法
3649
查看次数

PHP发送大量邮件:每个一个或一个一个?

使用PHP发送大量邮件时,最好是向每个订阅者发送一封电子邮件(在所有电子邮件地址中运行for循环),还是最好只在逗号分隔列表中添加所有BCC,从而仅发送一封电子邮件?

谢谢.

php one-to-one one-to-many mass-emails

5
推荐指数
1
解决办法
551
查看次数

级联一对一删除

我有 2 个类:条目和内容。

public class Entry implements Serializable {
     @OneToOne(cascade=CascadeType.ALL)
     private Content content;
}
Run Code Online (Sandbox Code Playgroud)

并且内容有他的值(名称等等)......我想要做的是,如果删除了一个内容,我想删除与......相关的任何条目

这不是典型的孤儿问题(我不是删除条目!我正在删除内容)

条目可以有或没有与...相关的内容,并且内容existenc与条目无关...

我怎么能说休眠“嘿......如果你要删除一个内容,找到任何相关的 FK 并将其删除!”

hibernate jpa one-to-one

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

Play + Ebean + JPA:在OneToOne映射上级联删除

这与这个问题有关,但下面的例子较短,所以我认为另一个问题是有道理的.

我有两个实体,A和B,一对一的关系.对于A,B是可选的,并且每个B必须具有A.我想级联从A到B的删除.这是我的第一次尝试:

@Entity
public class A extends Model {

    @Id
    private Long id;

    @OneToOne(optional = true, mappedBy = "a", cascade = CascadeType.REMOVE, orphanRemoval = true)
    private B b;

}

@Entity
public class B extends Model {

    @Id
    private Long id;

    @OneToOne(optional = false)
    private A a;

}
Run Code Online (Sandbox Code Playgroud)

但是,似乎Ebean忽略了"可选"注释,因为当我为ID为1的已保存A执行查找时,将执行以下SQL:

select t0.id c0, t1.id c1 
from a t0
join b t1 on t1.a_id = t0.id 
where t0.id = 1  
Run Code Online (Sandbox Code Playgroud)

换句话说,它执行内部而不是左连接,这导致查找失败,当没有关联B.我尝试了各种组合@JoinColumn,等等无济于事.我发现的唯一令人满意的解决方法是将A-to-B模型化为"假的"一对多关系.有更好的解决方案吗?这是一个错误还是Ebean已知/明确的限制?

java one-to-one jpa-2.0 ebean playframework-2.1

5
推荐指数
1
解决办法
1601
查看次数

使用Hibernate/JPA的@OneToOne映射中的外键字段为null

我有两个实体,DocumentBodyElement试图用Hibernate 4.2来坚持它们.mtdt_t填入正确的,但外键docidmtdt_body_tNULL.

我看到hibernate试图插入没有docid值.insert into mtdt_body_t values ( )

@Entity
@Table(name = "mtdt_t")
public class Document implements Serializable {

    @Id  
    @Column(name = "docid", unique = true, nullable = false)
    private String docid;

    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    @OrderColumn
    @JoinColumn(name = "docid", nullable = false)
    private BodyElement bodyElement;

    public String getDocid() {
        return docid;
    }

    public void setDocid(String docid) {
        this.docid = docid; …
Run Code Online (Sandbox Code Playgroud)

hibernate one-to-one

5
推荐指数
1
解决办法
7078
查看次数

实体框架(代码优先)一对多和一对一关系(有两个实体)。如何?

我正在尝试使用 EF Code First 来做到这一点:

数据库模型

有区域两个表:用户和区域。一个用户属于一个所需的区域,一个区域可以有零个或一个用户(作为管理员)。然后:

用户 *..1 区域和用户 0..1 区域

用户类:

public class User {
    public int UserId { get; set; }
    public string Name { get; set; }

    [ForeignKey("Area")]
    public int AreaId { get; set; }
    [InverseProperty("Users")]
    public virtual Area Area { get; set; }

    public virtual Area AreaTitular { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

区域类:

public class Area {
    public int AreaId { get; set; }
    public string Name { get; set; }

    public List<User> Users { get; …
Run Code Online (Sandbox Code Playgroud)

entity-framework one-to-one one-to-many code-first relationships

5
推荐指数
1
解决办法
3703
查看次数

子级保存时,Typeorm lazyload更新父级失败

我不确定这是不是一个错误,或者我做错了什么,但是我尝试了很多工作来实现这个目标而我做不到.我希望你们能帮忙.

基本上我有一对一的关系,我需要lazyLoad.关系树在我的项目中有点大,我无法在没有承诺的情况下加载它.

我面临的问题是,当我保存一个孩子时,父更新生成的sql缺少更新字段: UPDATE `a` SET WHERE `id` = 1

当我不使用lazyLoading(Promises)时,这非常有效.

我使用生成的代码工具设置了一个简单的示例.

实体A.

@Entity()
export class A {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToOne(
        (type: any) => B,
        async (o: B) => await o.a
    )
    @JoinColumn()
    public b: Promise<B>;
}
Run Code Online (Sandbox Code Playgroud)

实体B.

@Entity()
export class B {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToOne(
        (type: any) => A,
        async (o: A) => await o.b)
    a: Promise<A>;

}
Run Code Online (Sandbox Code Playgroud)

main.ts

createConnection().then(async connection => {

    const aRepo = getRepository(A);
    const bRepo = getRepository(B); …
Run Code Online (Sandbox Code Playgroud)

lazy-loading one-to-one typescript typeorm

5
推荐指数
1
解决办法
1466
查看次数

为什么不能休眠懒惰地获取@ManyToOne 和@OneToOne?

在经历了一些令人沮丧的问题和测试之后,我了解到 hibernate 不能懒惰地获取 ToOne 关系。

从我读过的内容来看,hibernate 通过将自己的 Set 设置为代理来延迟获取 ToMany,并且当在该 Set 上调用方法时,它会在执行操作之前获取数据库中的数据。美好的。

对于 ToOne,我看到的原因是,由于属性可以为 null(与 ToMany 不同),hibernate 必须知道它是否需要使用 null 或代理填充它,并且 hibernate 在不查询另一个表的情况下无法知道这一点。由于它必须查询其他表,因此它同时急切地获取数据。

我觉得这很愚蠢。我可以在关系的非拥有方理解它,表中没有任何内容指示是否填充了 toOne,但在拥有方,表包含一个带有外键的列,该列要么为空,要么不为空。

为什么不能休眠查询表并根据该列的值将属性设置为 null 或代理?它不需要检查第二个表,如果你的列不为空,你就知道第二个表有一个相应的条目(如果没有,你有完整性问题,hibernate 应该抛出)。

java hibernate lazy-loading one-to-one

5
推荐指数
1
解决办法
182
查看次数