标签: one-to-one

次要表或OnetoOne协会?

考虑以下"模型":

USER
    Long: PK
    String: firstName
    String: lastName

USER_EXT
    Long: PK
    String: moreInfo
    Date: lastModified
Run Code Online (Sandbox Code Playgroud)

我正在尝试查找/创建正确的Hibernate映射(使用Annotations),这样,使用HQL查询就像"来自用户"一样简单,它将生成以下SQL:

select firstName, moreInfo from USER, USER_EXT where user.pk = user_ext.pk
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有的东西,从使用@Secondarytable到@OneToOne协会,但我不能让它工作.

我现在得到的最好结果是@OneToOne关联生成多个SQL查询,一个用于获取USER中的行,而结果集中的每一行都有一个来自USER_EXT的select查询.

这是非常无效的.

任何的想法 ?

hibernate hql one-to-one

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

NHibernate多对一级联

我有以下两个类:

public class Project
{

    public virtual int ProjectId { get; set; }
    public virtual string ProjectName { get; set; }
    public virtual LegalEntity LegalEntity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public class LegalEntity
{
    public virtual int LegalEntId { get; set; }
    public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

映射为:

<class name="Project" table="Project" dynamic-update="true">
  <id name="ProjectId">
    <generator class="native"/>
  </id>  

  <property name="ProjectName" />
  <many-to-one name="LegalEntity" column="LegalEntId" fetch="join" cascade="all-delete-orphan" />


</class>
Run Code Online (Sandbox Code Playgroud)

<class name="LegalEntity" table="LegalEnt" dynamic-update="true">

  <id name="LegalEntId">

    <generator …
Run Code Online (Sandbox Code Playgroud)

nhibernate many-to-many one-to-one one-to-many

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

SQLAlchemy一对一关系,主要是外键

我将类映射到Drupal生成的现有MySQL表.我需要与表格(一对一)联系,但我遇到了问题.两个表的列nid.这两个字段都是主键.没有主键我无法定义外键.关系图不适用于主键.我的版本如下.

class Node(Base):
    __tablename__ = 'node'
    nid = Column(Integer, primary_key=True)
    vid = Column(Integer)
    uuid = Column(String(128))
    type = Column(String)

    field_data = relationship("NodeFieldData", order_by="NodeFieldData.nid", backref="node")

    def __repr__(self):
        return "<User(nid='%s', vid='%s', uuid='%s', type='%s')>" % (self.nid, self.vid, self.uuid, self.type)

class NodeFieldData(Base):
    __tablename__ = 'node_field_data'
    nid = Column(Integer, primary_key=True)
    type = Column(String, nullable=False)
    title = Column(String, nullable=False)
    #nid = Column(Integer, ForeignKey('Node.nid'))

    def __repr__(self):
        return "<User(nid='%s', vid='%s', uuid='%s', type='%s')>" % (self.nid, self.vid, self.uuid, self.type)
Run Code Online (Sandbox Code Playgroud)

谢谢.

python sqlalchemy one-to-one

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

c# - 实体框架核心级联删除一对一关系

我在服务和 Lexikon 之间有一对一的关系,而服务有 Lexikon 的外键。我的服务不需要 Lexikon,因此我将 LexikonID 设置为可为空。但我的 Lexikon 仅当与服务相关时才能存在,因此我将导航属性设置为 [必需]。我使用的是 Code First,因此 EF 构建了我的数据库。

 public class Service
 {

    public int ServiceID { get; set; }

    //Foreignkey
    public int? LexikonID { get; set; }

    //Navigation Properties

    public Lexikon Lexikon { get; set; }
 }

 public class Lexikon
 {
    public int LexikonID { get; set; }

    //Navigation Properties
    [Required]
    public SoftwareService SoftwareService { get; set; }

 }
Run Code Online (Sandbox Code Playgroud)

如果我删除我的服务,我会尝试自动删除 Lexikon 表中的数据,但不幸的是,我不知道如何执行此操作,因为我是 EF 新手。

我在 dbContext 中尝试了以下代码:

       modelBuilder.Entity<SoftwareService>()
                .HasOne(l => l.Lexikon)
                .WithOne(s => …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework cascade one-to-one entity-framework-core

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

Hibernate OneToONe Lazy Fetching

我知道这个问题被问了好几次,但是我找不到一个明确的例子并且回答了这个话题(我也尝试了其他可能的解决方案).

我正在使用Spring JPAHibernate尝试对OneToONe关系进行延迟获取.我有2个简单的Entity类,一个Repository类和使用h2数据库来延迟加载一个实体.我尝试构建时间字节码检测来实现这一点,这些是我的类.

A级

@Entity
public class A {

    private String name;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne(optional = false, fetch = FetchType.LAZY, mappedBy = "a")
    @LazyToOne(LazyToOneOption.NO_PROXY)
    private B b;
}
Run Code Online (Sandbox Code Playgroud)

B级

@Entity
public class B {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "A_ID")
    private A a;
}
Run Code Online (Sandbox Code Playgroud)

知识库

public interface ARepository extends JpaRepository<A, Long> {
    A findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

pom.xml字节码增强器

<plugin>
    <groupId>org.hibernate.orm.tooling</groupId>
    <artifactId>hibernate-enhance-maven-plugin</artifactId> …
Run Code Online (Sandbox Code Playgroud)

java hibernate lazy-loading one-to-one spring-data-jpa

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

在 JPA Hibernate 中加入部分组合键

我正在使用 JPA 为具有复合键的数据库定义数据模型。我无法更改数据库。

我有一个Car带有复合键(carType 和 carId)的实体。第二个(可选)PorscheInfo实体包含保时捷汽车的附加信息。不幸的是,相应的“porsche_info”表不包含包含 carType 信息的列,因为其条目专门引用CarType = 'Porsche'

此操作的 SQL 很简单:

SELECT *
FROM cars
LEFT JOIN porsche_info
ON cars.CarId = porsche_info.CarId
    AND cars.CarType = 'Porsche'
Run Code Online (Sandbox Code Playgroud)

如何将其转换为正确的 JPA 设置?

到目前为止,我有以下实体类:

@Embeddable
public class CarKey {
    private String carType;

    private String carId;
}

@Entity(name = "cars")
public class Car {
    @EmbeddedId
    private CarKey key;

    // car information

    @OneToOne
    @JoinColumn(name = "CarId", referencedColumnName = "CarId")
    private PorscheInfo porscheInfo;
    // or
    @OneToMany
    @JoinColumn(name = "CarId", …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa one-to-one composite-key one-to-many

6
推荐指数
0
解决办法
746
查看次数

具有复合主键的一对一双向映射

有人可以帮助我使用 Hibernate/JPA 使用复合主键为以下关系进行双向一对一 JPA 映射吗? 在此处输入图片说明

mapping hibernate jpa one-to-one composite-primary-key

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

如何限制模糊连接只返回一场比赛

我正在尝试在 R 中创建一个程序,用三位数机场代码替换城市名称或机场名称。我想要进行模糊匹配以提供更大的灵活性,因为我试图替换的城市/机场名称的数据来自许多不同的来源。我的问题是,通过模糊匹配左连接,我似乎无法找到一种方法来仅从右表(代码)返回与左表(名称)最接近的匹配。

例如:将城市奥古斯塔 (Augusta, GA) 与奥古斯塔 (Augusta, GA) 和奥古斯塔 (Augusta, ME) 进行匹配并复制数据。我不想限制最大距离,因为我仍然想允许灵活性,但我不能让我的数据重复。我想找到一种方法来进行部分字符串匹配,但只返回最接近的结果。

我尝试过使用 fuzzyjoin 包,但从我所见,没有办法限制只有一场比赛或只有最佳比赛。我知道在 pmatch 中有一个禁止重复的调用,但我找不到使 pmatch 作为连接工作的方法。

data <- stringdist_left_join(data, orig, ignore_case = TRUE)
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码,stringdist 是 R 中 fuzzyjoin 包的函数。数据集“data”包含城市名称、航班数量和其他乘客信息。“orig”数据集有一列城市/机场名称和机场代码

SAMPLE INPUT
**data table:**
City Name       Passenger Name    Fare Paid
Augusta, GA         Jon            $100
Dallas, TX          Jane           $200
Spokane, WA         Chris          $300

**orig table:**
City Name      Code
Augusta, GA    JCL
Dallas, TX     DAL
Denver, CO     DEN
Seattle, WA    SEA
Spokane, WA    GEG
Austin, TX     AUS
Augusta, ME …
Run Code Online (Sandbox Code Playgroud)

r fuzzy one-to-one string-matching fuzzyjoin

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

NHibernate,一对一映射,级联插入

我在Company类和CompanySettings类之间有一对一的关系.当我创建一个新的Company对象时,(在Company的构造函数中为其Settings属性创建了一个CompanySettings对象),然后

SaveOrUpdate(session, companyObject)
Run Code Online (Sandbox Code Playgroud)

我希望INSERT从公司级联到CompanySettings.但是,除非我在CompanySettings对象上明确调用SaveOrUpdate,否则不会发生这种情况.

映射文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`>
  <class name="AST.Domain.Company, AST.Domain" table="Companies">
    <id name="EntityID" column="CompanyId">
      <generator class="guid.comb" />
    </id>
    <property name="CompanyName" />
    . . .
    <one-to-one name="Settings" class="AST.Domain.CompanySettings, AST.Domain"
                constrained="true" lazy="false" />
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

我的公司设置类的映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="AST.Domain.CompanySettings, AST.Domain" table="CompanySettings">
    <id name="EntityID" column="CompanyId">
      <generator class="foreign">
        <param name="property">Company</param>
      </generator>
    </id>
    <property name="MaxUsers" />
    <one-to-one name="Company" class="AST.Domain.Company, AST.Domain" />
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

mapping nhibernate cascade insert one-to-one

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

EF 4.1 Code First ModelBuilder HasForeignKey用于一对一关系

很简单,我首先使用Entity Framework 4.1代码,我想用modelBuilder上的流畅调用替换我的[ForeignKey(..)]属性.类似于下面的WithRequired(..)和HasForeignKey(..)的东西,它将显式外键属性(CreatedBySessionId)与关联的导航属性(CreatedBySession)绑定在一起.但我想这样做是为了一对一的关系,而不是一对一:

modelBuilder.Entity<..>().HasMany(..).WithRequired(x => x.CreatedBySession).HasForeignKey(x => x.CreatedBySessionId)
Run Code Online (Sandbox Code Playgroud)

下面是一个更具体的例子.这与[ForeignKey(..)]属性非常愉快,但我想废除它并纯粹在modelbuilder上配置它.

public class VendorApplication
{
    public int VendorApplicationId { get; set; }

    public int CreatedBySessionId { get; set; }
    public virtual Session CreatedBySession { get; set; }
}

public class Session
{
    public int SessionId { get; set; }

    [ForeignKey("CurrentApplication")]
    public int? CurrentApplicationId { get; set; }
    public virtual VendorApplication CurrentApplication { get; set; }

    public virtual ICollection<VendorApplication> Applications { get; set; }
}

public class MyDataContext: DbContext
{
    public IDbSet<VendorApplication> Applications …
Run Code Online (Sandbox Code Playgroud)

entity-framework one-to-one code-first ef-code-first entity-framework-4.1

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