Django教程中有这一行,编写你的第一个Django应用程序,第1部分:
p.choice_set.create(choice='Not much', votes=0)
Run Code Online (Sandbox Code Playgroud)
如何被choice_set召唤存在,它是什么?
我想这choice部分是Choice本教程中使用的模型的小写版本,但它是什么choice_set?你能详细说说吗?
我在使用带有以下映射的JPA删除孤立节点时遇到问题
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;
Run Code Online (Sandbox Code Playgroud)
我遇到了挂在数据库周围的孤立角色的问题.
我可以使用注释org.hibernate.annotations.CascadeHibernate特定标记,但显然我不想将我的解决方案绑定到Hibernate实现.
编辑:似乎JPA 2.0将包括对此的支持.
这个问题与Hibernate Annotation Placement Question有些相关.
但我想知道哪个更好?通过属性访问或通过字段访问?各有哪些优缺点?
好的,这可能是一个微不足道的问题,但我无法想象和理解差异以及何时使用每个差异.关于单向和双向映射等概念如何影响一对多/多对多关系,我也有点不清楚.我现在正在使用Hibernate,所以任何与ORM相关的解释都会有所帮助.
举个例子,假设我有以下设置:
public class Person{
private Long personId;
private Set<Skill> skills;
//Getters and setters
}
public class Skill{
private Long skillId;
private String skillName;
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
那么在这种情况下我会有什么样的映射?这个具体示例的答案肯定是值得赞赏的,但我也非常希望概述何时使用一对多和多对多以及何时使用连接表与连接列以及单向与双向.
问题出在标题中.下面我刚才描述了我的一些想法和发现.
当我有非常简单的域模型(没有任何关系的3个表)时,我的所有实体都没有实现Serializable.
但是当域模型变得更复杂时,我得到了RuntimeException,它说我的一个实体没有实现Serializable.
我使用Hibernate作为JPA实现.
我想知道:
单向和双向关联有什么区别?
由于在db中生成的表都是相同的,因此我发现的唯一区别是双向关联的每一侧都将引用另一侧,而单向不引用.
这是一个单向关联
public class User {
private int id;
private String name;
@ManyToOne
@JoinColumn(
name = "groupId")
private Group group;
}
public class Group {
private int id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
双向关联
public class User {
private int id;
private String name;
@ManyToOne
@JoinColumn(
name = "groupId")
private Group group;
}
public class Group {
private int id;
private String name;
@OneToMany(mappedBy="group")
private List<User> users;
}
Run Code Online (Sandbox Code Playgroud)
区别在于该组是否拥有用户的参考.
所以我想知道这是唯一的区别吗?哪个推荐?
我有模型Foo有字段栏.bar字段应该是唯一的,但允许空值,这意味着如果bar字段是null,我想允许多个记录,但如果不是,null则值必须是唯一的.
这是我的模型:
class Foo(models.Model):
name = models.CharField(max_length=40)
bar = models.CharField(max_length=40, unique=True, blank=True, null=True, default=None)
Run Code Online (Sandbox Code Playgroud)
这是表的相应SQL:
CREATE TABLE appl_foo
(
id serial NOT NULL,
"name" character varying(40) NOT NULL,
bar character varying(40),
CONSTRAINT appl_foo_pkey PRIMARY KEY (id),
CONSTRAINT appl_foo_bar_key UNIQUE (bar)
)
Run Code Online (Sandbox Code Playgroud)
当使用管理界面创建多个bar为空的foo对象时,它会给出一个错误:"Foo with this Bar已经存在."
但是当我插入数据库(PostgreSQL)时:
insert into appl_foo ("name", bar) values ('test1', null)
insert into appl_foo ("name", bar) values ('test2', null)
Run Code Online (Sandbox Code Playgroud)
这很好用,它允许我插入超过1条记录,条形为空,所以数据库允许我做我想要的,这只是Django模型的错误.有任何想法吗?
编辑
就DB而言,解决方案的可移植性不是问题,我们对Postgres感到满意.我已经尝试设置一个可调用的唯一,这是我的函数返回True/False为特定的bar值,它没有给出任何错误,但是如果它没有任何影响那么缝合.
到目前为止,我已经从bar属性中删除了唯一的说明符并处理了应用程序中的bar唯一性,但仍然在寻找更优雅的解决方案.有什么建议?
作为一个没有在现实世界项目中使用这两种技术的人,我想知道是否有人知道这两者如何相互补充以及它们的功能重叠多少?
拥有方到底意味着什么?一些映射示例(一对多,一对一,多对一)的解释是什么?
以下文本摘自Java EE 6文档中对@OneToOne的描述.你可以看到这个概念拥有方在里面.
定义与具有一对一多重性的另一个实体的单值关联.通常不必明确指定关联的目标实体,因为它通常可以从被引用的对象的类型推断出来.如果关系是双向的,则非拥有方必须使用OneToOne批注的mappedBy元素来指定拥有方的关系字段或属性.
orm ×10
hibernate ×6
java ×5
jpa ×5
django ×2
annotations ×1
associations ×1
doctrine ×1
jpa-2.0 ×1
linq ×1
linq-to-sql ×1
many-to-many ×1
mapping ×1
nhibernate ×1
one-to-many ×1
php ×1
propel ×1
python ×1
symfony1 ×1