这个错误在过去的4个小时里一直在破坏我.
此外,当我交换它并获得用户数据时,然后消息数据... User.name将显示,但Message.message不会.所以数据肯定会进入,但它们之间的关系似乎被打破了.
请考虑以下数据库架构:
create table UserGroup ( id int not null auto_increment, name varchar(200),
primary key(id));
create table User ( id int not null auto_increment, name varchar(200),
groupId int not null, primary key(id));
Run Code Online (Sandbox Code Playgroud)
User.groupId = UserGroup.id,因此用户只能是一个组的成员,但用户组可以存在许多用户.好到目前为止,让我们在Hibernate中创建实体.这是User:
@Entity
@Table(name = "User")
public class User {
@Id
@Column(name="id", nullable = false)
private Integer id;
@Column(name="name", length = 200, nullable = true)
private String name;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "groupId", nullable = false, insertable=false, updatable=false)
@ForeignKey(name="FK_GroupId")
private UserGroup userGroup;
/* Getters, Setters, toString, equals …Run Code Online (Sandbox Code Playgroud) 我试图在一次调用中急切地加载所有相关实体或实体集合.我的实体看起来像:
Class Person
{
public virtual long Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
Class Employee
{
public virtual long Id { get; set; }
public DateTime AppointmentDate { get; set; }
public virtual ICollection<EmployeeTitle> Titles { get; set; }
public virtual Person Person { get; set; }
}
Class EmployeeTitle
{
public virtual long Id { get; set; }
public virtual bool IsCurrent { …Run Code Online (Sandbox Code Playgroud) c# entity-relationship code-first eager-loading entity-framework-4.1
我与以下实体类具有双向一对多关系:
0或1个客户< - > 0个或更多产品订单
当持久化客户端实体时,我也希望持久化相关的产品订单实体(因为它们的"父"客户端的外键可能已被更新).
当然,所有必需的CASCADE选项都在客户端设置.但是,如果在引用现有产品订单时第一次持久保留新创建的客户端,则不起作用,如下所示:
我尝试了几个apporaches,但没有一个显示预期的结果.请参阅下面的结果.我在这里阅读了所有相关问题,但他们没有帮助我.我在GlassFish 3.1.2上的Apache Derby(JavaDB)内存数据库中使用EclipseLink 2.3.0,纯JPA 2.0 Annotations和JTA作为事务类型.实体关系由JSF GUI管理.对象级关系管理工作(除了持久),我用JUnit测试测试它.
方法1)"默认"(基于NetBeans类模板)
客户:
@Entity
public class Client implements Serializable, ParentEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy = "client", cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH},
fetch= FetchType.LAZY)
private List<ProductOrder> orders = new ArrayList<>();
// other fields, getters and setters
}
Run Code Online (Sandbox Code Playgroud)
ProductOrder:
@Entity
public class ProductOrder implements Serializable, ChildEntity {
private static final long serialVersionUID = 1L;
@Id …Run Code Online (Sandbox Code Playgroud) 我有两个简单的表"items"和"orders".为简单起见,我们假设一个项目只能在一个订单中,或者一个订单只能包含一个项目.
现在,因为这可以使用简单的一对一关系实现,我可以执行以下操作:
我可以将orders表的主键添加到items表中,如下所示
//Table Items
item_id, item_name, order_id
1, shoes, 1
2, watch, 2
//Table Orders
order_id, customer
1, James
2, Rick
Run Code Online (Sandbox Code Playgroud)
或者我可以将items表的主键添加到orders表中,如下所示
//Table Items
item_id, item_name
1, shoes
2, watch
//Table Orders
order_id, customer, item_id
1, James, 1
2, Rick, 2
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的,为什么?是否有任何指导线来决定哪个键在哪里?当然,常识会在上面的简单例子中起作用,但在复杂的例子中我们如何决定?
mysql database database-design entity-relationship one-to-one
注意:最初这个问题是针对PostgreSQL提出的,但是,答案几乎适用于任何具有可以检测外键关联的JDBC驱动程序的数据库.
查询外键和表间关系的PostgreSQL数据字典非常简单,但是如何使用该信息生成表之间关系的图形?
关于可以做到这一点的工具的任何建议?
编辑:我知道GraphVIZ/DOT 可能很有用,但是,我不知道如何编写将生成有向图.DOT文件的应用程序.
<RANT_MODE>
EF代码优先方法意味着节省大量时间,但暂时我只看到玩具示例,并花了几个小时试图了解如何使它生成我想要的数据库.但仍然希望尤里卡时刻:-)
<RANT_MODE />
关于问题!
我试图了解EF如何映射和检索对象关系.什么时候我应该标记一个属性virtual?(public Person Owner { get; set; }与对比一样public virtual Person Owner { get; set; }.)在代码优先的几十个例子中,我看到他们似乎可以互换地使用这些,而没有太多的解释.我所知道的是导航属性(public virtual ICollection<Person> Owners { get; set; })需要是virtual为了使延迟加载成为可能(正确...?),但这在非集合的世界中如何应用?
public int OwnerId { get; set; }除了我感兴趣的'main'属性之外,我无法找到关于是否应该包含外键字段()的任何信息public Person Owner { get; set; }.我试着不这样做,EF亲切地自动添加了一个Owner_Id在我的表中命名的int列,似乎理解了我的意图.
在Code First的约定("外键"部分)中,EF团队提到"在关系的依赖端包含外键属性是很常见的",并且"Code First现在将推断任何名为''的属性(即OwnerId)[...]与主键具有相同的数据类型,表示关系的外键".IE浏览器.如果我有两个EF将知道他们是相关的.
但除了"异物"本身之外,明确指定持有FK的此类属性是否被视为良好做法?
正如我上面提到的,即使我只public Person Owner { get; set; }在我的对象中(例如Event),该表Events将包含Owner_Id由EF自动添加的列.更重要的是,在检索时,我将可以访问属性 …
.net mapping entity-relationship entity-framework code-first
我在实体A和实体B(单面)之间有一对一的关系,例如名为bRel.我有NSAtomicStore(MyStore)和NSAtomicStoreCacheNode(MyCacheNode)的子类.在load:MyStore 的方法中,我为实体A和B(aNode和bNode)创建MyCacheNode实例,并为每个实例分配相应的propertyCache字典.propertyCache for aNode包含key的bNode @"bRel".
aManagedObject是正常创建的,并且所有属性都有效.但是当aManagedObject通过它访问bManagedObject时aManagedObject.bRel.someAttribute,bManagedObject仍然是错误的.bManagedObject没有收到awakeFromInsert或awakeFromFetch.bNode和bManagedObject共享相同的实例managedObjectID.当bManagedObject访问someAttribute时,bNode处于活动状态.当aManagedObject访问其属性时,它将通过valueForKey:MyCacheNode.当bManagedObject执行时,我们无法实现.
bManagedObject根本就不会发射.
谁能想到我应该在这种情况下检查什么?
attributes entity-relationship core-data objective-c nsmanagedobject
免费软件是一个加号.你能用一句话描述为什么偶尔使用它应该足够好吗?
编辑:您可以查看这个很酷的链接,提供有关实体关系图和工具的更多信息
编辑:对于选择的答案几个提示 - 单击实体,即使它看起来像圆圈并键入名称并输入 - 它将为您提供实体框 - 单击关联,Ctrl + L将为您提供好的线条
继此之后:
Yii2 SearchModel中的search()如何工作?
我希望能够过滤一GridView列关系数据.这就是我的意思:
我有两张桌子,TableA和TableB.两者都有使用Gii生成的相应模型.TableA有一个值的外键TableB,如下所示:
TableA
attrA1, attrA2, attrA3, TableB.attrB1
TableB
attrB1, attrB2, attrB3
Run Code Online (Sandbox Code Playgroud)
attrA1和attrB1是其相应表的主键.
现在,我有一个Yii2 GridView的attrA2,attrA3和attrB2.我有一个工作过滤器attrA2,attrA3所以我可以搜索列值.我也对这两个列进行了工作排序 - 只需单击列标题即可.我希望能够添加此过滤和排序attrB2.
我的TableASearch模型看起来像这样:
public function search($params){
$query = TableA::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$this->addCondition($query, 'attrA2');
$this->addCondition($query, 'attrA2', true);
$this->addCondition($query, 'attrA3');
$this->addCondition($query, 'attrA3', true);
return $dataProvider;
} …Run Code Online (Sandbox Code Playgroud)