我们公司对大型数据库的重新设计大量使用了数据库上的复合主键.
忘记性能影响,这会在Entity Framework 4.0中使用此db时遇到任何困难吗?数据库结构不太可能改变,我不是在寻找"哲学"辩论,但实际影响是什么?
据杰里米·米勒,"复合键使任何类型的对象/关系映射和一般很难持久性的." 但他并没有真正说出原因.这与Entity Framework 4.0如何处理密钥有关吗?
我在oracle的1个表中有一个复合主键.我想为我的第二个表中的一个表项创建一个外键,该表引用第一个表中的复合主键.我收到错误ORA-02256.关于如何进入这个的任何想法?
CREATE TABLE groupspersonx (
personid number,
groupid number,
CONSTRAINT pk_persongroupid PRIMARY KEY(personid, groupid)
);
CREATE TABLE restrictedgroups (
groupid number,
name varchar2(50),
dateadded date,
since date,
notes varchar2(1024),
CONSTRAINT pk_groupid PRIMARY KEY(groupid),
CONSTRAINT fk_persongroup FOREIGN KEY(groupid) REFERENCES groupspersonx(personid, groupid)
);
Run Code Online (Sandbox Code Playgroud) 假设我有一个制表符分隔文件,其中包含如下格式化的用户活动数据:
timestamp user_id page_id action_id
Run Code Online (Sandbox Code Playgroud)
我想编写一个hadoop作业来计算每个页面上的用户操作,因此输出文件应如下所示:
user_id page_id number_of_actions
Run Code Online (Sandbox Code Playgroud)
我需要像复合键这样的东西 - 它将包含user_id和page_id.使用hadoop有没有通用的方法呢?我找不到任何有用的东西.到目前为止,我在mapper中发出这样的键:
context.write(new Text(user_id + "\t" + page_id), one);
Run Code Online (Sandbox Code Playgroud)
它有效,但我觉得这不是最好的解决方案.
我有一个只包含2个字段的表.该表具有由这两个字段形成的复合PK.
使用Netbeans从数据库创建实体bean时,实体bean不会像其他具有2个以上字段的表一样自动创建.
所以我想我需要自己创建实体bean.创建此实体bean的最佳做法是什么?是否必须包含COMPOSITE KEY对象?
我有一个表有两个外键到两个不同的表,两个外键共享一列:
CREATE TABLE ZipAreas
(
country_code CHAR(2) NOT NULL,
zip_code VARCHAR(10) NOT NULL,
state_code VARCHAR(5) NOT NULL,
city_name VARCHAR(100) NOT NULL,
PRIMARY KEY (country_code, zip_code, state_code, city_name),
FOREIGN KEY (country_code, zip_code) REFERENCES Zips (country_code, code),
FOREIGN KEY (country_code, state_code, city_name) REFERENCES Cities (country_code, state_code, name)
)
Run Code Online (Sandbox Code Playgroud)
如您所见,有两个FK共享country_code(巧合地引用了引用路径末尾的同一列).实体类看起来像(JPA 1.0 @IdClass):
@Entity
@Table(name = "ZipAreas")
@IdClass(value = ZipAreaId.class)
public class ZipArea implements Serializable
{
@Id
@Column(name = "country_code", insertable = false, updatable = false)
private String countryCode;
@Id
@Column(name = …Run Code Online (Sandbox Code Playgroud) 我意识到有很多类似的问题,但没有一个能帮我解决这个问题.
我正在使用一个名为Tynamo的CRUD框架,后者又依赖于Apache Tapestry和Hibernate.这一切都很好,除了当我尝试在具有复合/复合主键的表上使用CRUD时.
我决定不去这@EmbeddedId条路,因为它似乎根本不适用于框架.话虽这么说,我一直在使用这种@IdClass方法,主要是工作; 我想我是一两行远离成功的代码.
问题在于,当它开始使用反射来构建对象时,它会爆炸并说org.hibernate.InstantiationException: No default constructor for entity: ...,即使确实有一个公共的空构造函数用于该内部类.
在回答时,请避免使用代码片段,并使用完整的课程等,以便访问此主题的其他人可以更全面地了解正在发生的事情.
你可以在下面看到我的课程:
package com.company.crud.entities;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import com.company.crud.entities.TransferExtension.TransferExtensionPK;
@Entity(name = "Transfer_Extensions")
@IdClass(TransferExtensionPK.class)
public class TransferExtension implements Serializable {
private static final long serialVersionUID = 1L;
@Id
// @NotNull(message = "Please supply a Script Code")
// @Length(min = 3, max = 4)
@Column(name = "Division", nullable = false)
private String scriptCode;
@Id
// @NotNull(message = …Run Code Online (Sandbox Code Playgroud) 我有一个数据库,其中包含一个带有2列主复合键的表(一个int,一个bigint.)我有两个具有复合外键的表,引用第一个表的复合主键.(就我所知,)数据库本身的关系很好,很花哨.
通过DB-first EF6生成DB上下文时,这些关系/导航属性不会在生成的模型中表示(两个子表中没有虚拟成员引用父表.)
由于它是db-first,我无法修改模型.
entity-framework composite-key database-first ef-database-first entity-framework-6
我正在使用DB2 DBMS.
场景1:
myTable有一个复合键(key1,key2),其中key1和key2都是来自yourTable的外键.
我想将yourTable中的新数据插入到myTable中,但前提是myTable中还没有key1,key2组合.
insert into myTable(key1, key2, someData)
values(x, y, z)
where NOT EXISTS (want to check if composite key is not already present)
Run Code Online (Sandbox Code Playgroud)
场景2:
我使用属性data1,data2和data将数据放入yourTable的java对象中.
我想在Scenario1中插入带有检查的上述数据.dataT + data2不应该已经出现在myTable中.
我该如何实现这一目标?我认为我们不能在insert语句中使用SELECT语句.
insert into myTable(key1, key2, data)
values(data1, data2, data)
where (data1 + data2 are already not present in myTable)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个包含几个复合外键的数据库.例如,以下是外键的生成脚本:
ALTER TABLE [dbo].[WorkingRosters] WITH NOCHECK ADD CONSTRAINT
[FK_WorkingRoster_ShiftLeaveCode] FOREIGN KEY([OrganizationID], [ShiftLeaveCode])
REFERENCES [dbo].[ShiftLeaveCodes] ([OrganizationID], [Code])
GO
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Entity Framework 5 Database-First从此数据库生成模型.但是,不会使用所有表和其他简单外键生成组合外键的关联.
我怎么能:
谢谢!
entity-framework composite-key ef-database-first entity-framework-5
public class UserBuilding
{
[Key, Column(Order = 0)]
public int UserId { get; set; }
[Key, Column(Order = 1)]
public int BuildingId { get; set; }
public int BuildingLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我想要返回属于用户的所有不同建筑物,我会执行以下操作:
database.UserBuildings.Where(b => b.UserId == userId);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我想从特定用户返回特定建筑物,该怎么办?这样做最"有效"的方式是什么?有没有比以下更好的方法(例如内置函数):
database.UserBuildings.Where(b => b.UserId == userId && b.BuildingId == buildingId);
Run Code Online (Sandbox Code Playgroud) composite-key ×10
java ×3
hibernate ×2
jpa ×2
sql ×2
database ×1
db2 ×1
foreign-keys ×1
hadoop ×1
jpa-2.0 ×1
oracle ×1
orm ×1
overlapping ×1
primary-key ×1
return ×1
row ×1
tapestry ×1
tynamo ×1