我做了一个有更多关系的小应用程序。现在我想删除我的表的详细信息我该如何删除我没有任何要删除的想法。
关系如下:
PanCard-->员工(小野一一)
Employee-->ProjectManger(与Employee的双向多对一关联)
项目-->项目管理器(与项目的双向多对一关联)
现在我想把表数据一一删除
下面是我的 POJO 类代码:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="pName")
private String pName;
@Column(name="pNumber")
private int pNumber;
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="EId")
private Employee employee;
Run Code Online (Sandbox Code Playgroud)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "empFirstName")
private String empFirstName;
@Column(name = "empLastName")
private String empLastName;
@Column(name = "empDepartment")
private String empDepartment;
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="pmId")
private ProjectManager projectManager;
Run Code Online (Sandbox Code Playgroud)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String department;
private String managerFirstName;
private String managerLastName;
//bi-directional many-to-one association …Run Code Online (Sandbox Code Playgroud) 编辑为使用一对一字段
我想将建筑物的面积添加到 django modeladmin 中。表结构是
class Area(models.Model):
id= models.IntegerField('Buildings', db_column='id')
area=models.FloatField(blank=True, null=True)
class Buildings(models.Model):
id = models.AutoField(primary_key=True)
auto_sf = models.OneToOneField(Area, db_column='id')
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过使用访问区域属性
b=buildings.get(id=1)
print(b.area.area)
Run Code Online (Sandbox Code Playgroud)
但我不明白如何将 b.area.area 合并到 modeladmin 中 - 因为这不起作用。
class AdminSection(admin.ModelAdmin):
def area(self, obj):
return obj.area.area
fields=(('id','area'))
Run Code Online (Sandbox Code Playgroud) 我想在两个表之间创建一对一关系:teachers和office(老师是该关系的所有者)。在网上查了一下,我发现了两种不同的方法:
foreign key第一个,在 Office 表中定义并添加约束NOT NULL和UNIQUE。基本上,具有 UNIQUE 约束的强制性一对多关系:如下所示:
CREATE TABLE office(
id SERIAL PRIMARY KEY,
floor SMALLINT CHECK (floor > 0 AND floor <= 10),
size SMALLINT CHECK (size > 0),
teacher_id INTEGER NOT NULL UNIQUE REFERENCES teachers(teacher_id)
);
Run Code Online (Sandbox Code Playgroud)
第二个是我们将办公桌上的 和 合并为一排。就像这样:primary key foreign key
CREATE TABLE office(
id SERIAL PRIMARY KEY REFERENCES teachers(teacher_id),
floor SMALLINT CHECK (floor > 0 AND floor <= 10),
size SMALLINT …Run Code Online (Sandbox Code Playgroud) 我PrimaryKeyJoinColumn在父方使用注释有一对一的关系.现在我想自己保存子实体.
例如,我有Employee和EmpInfo作为子实体,我需要保存EmpInfo(当然在设置父项的id属性后).但是,当使用这样的安排时,我会得到下面列出的例外情况......
org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么hibernate不允许这个?为了更清楚,我的代码如下......
ParentEntity:
public class Employee {
private Long id;
private String name;
private EmployeeInfo info;
private Integer enumId;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
@Column(name="EMP_NAME")
public String getName() {
return name;
}
@PrimaryKeyJoinColumn
@OneToOne(cascade = CascadeType.REMOVE)
public EmployeeInfo getInfo() {
return info;
}
}
Run Code Online (Sandbox Code Playgroud)
ChildEntity:
@Table(name="EMP_INFO")
@Entity
public class EmployeeInfo {
private Long id;
private String email;
@Column(name="EMPLOYEE_EMAIL")
public String getEmail() …Run Code Online (Sandbox Code Playgroud) 我是Hibernate的新手.我有一个问题,当我试图运行选择查询说
"from Foo where Foo.some_id=2"
Run Code Online (Sandbox Code Playgroud)
(使用Hibernate模板)然后Hibernate也尝试将记录插入到表'Foo2'中,该表与Foo表具有一对二的关联
Bean Foo
class Foo{
int id;
....
Foo2 foo2;
}
Run Code Online (Sandbox Code Playgroud)
Foo.hbm.xml
...
<one-to-one name="foo2" class="Foo2" property-ref="foo"
constrained="false" cascade="save-update"></one-to-one>
...
Run Code Online (Sandbox Code Playgroud)
Bean Foo2
Class Foo2{
...
private int foo;
...
}
Run Code Online (Sandbox Code Playgroud)
Foo2.hbm.xml
...
<property name="foo" column="foo_id"/>
...
Run Code Online (Sandbox Code Playgroud)
用法
DetachedCriteria criteria = createDetachedCriteria();
criteria.add(Restrictions.eq("some_id", value));
return getHibernateTemplate().findByCriteria(criteria);
public List<SnsUser> getAllSnsUsersByProperty(String prop, Object val){
String query = "from SnsUser su where su." + prop + " =:" + prop;
return executeQuery(query, new String[]{prop}, new Object[]{val});
}
public static …Run Code Online (Sandbox Code Playgroud) 我正在获得期望的异常,并且无法追踪其原因.请帮帮我.
我只是使用OneToOne映射与PrimarykeyJoinColumn属性.
@Entity
@Table(name="mediashow_user1")
public class UserVO implements Serializable{
private static final long serialVersionUID = 6066636545309839156L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long empid ;
private String email = null;
private String fname = null ;
private String lname = null ;
private String mname = null ;
private String uname = null ;
private String passwd = null ;
private String serctquestion = null ;
private String serctanswer = null ;
private int telephone;
private Timestamp cur_timestamp = null ; …Run Code Online (Sandbox Code Playgroud) 层次结构如下:父对象与Child对象关联.我创建一个新的Parent对象,并希望将它与已存储在数据库中的Child对象关联,并将Parent保存到数据库.一种方法是预加载Child并将其与Parent关联.但是我可以创建一个新的Child对象,设置它的id,并将它与Parent关联,所以当我保存Parent时,hibernate将自动找到相应的Child并填写缺少的Child字段,这些字段最初设置为null?
谢谢.
我有一个笑话模型:
class Joke(models.Model):
...
date_created = models.DateTimeField(default=datetime.now, blank=True)
date_modified = models.DateTimeField(default=datetime.now, blank=True)
creator = models.OneToOneField(User, default=1)
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试迁移最后一行时,出现错误。基本上,我想将用户链接到 Joke 对象,并且由于我已经有一个数据库,因此我希望默认值为 1,即管理员用户的 ID(我检查过...)。Makemigrations 工作得很好,但是当我尝试迁移时,我得到了这个:
Operations to perform:
Apply all migrations: jokes_app, sessions, contenttypes, auth, taggit, default, admin
Running migrations:
Rendering model states... DONE
Applying jokes_app.0008_auto_20160723_1559...Traceback (most recent call last):
File "/home/antoni4040/Documents/Jokes_Website/django-jokes/venv/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.IntegrityError: duplicate key value violates unique constraint "jokes_app_joke_creator_id_key"
DETAIL: Key (creator_id)=(1) already exists.
The above exception was the direct cause of the following exception: …Run Code Online (Sandbox Code Playgroud) 虽然有很多关于如何建模的信息,在JPA(2)中,一对一的关系 或具有自然键的实体,我还没有找到一个明确/简单的答案如何建模我们有两者的情况,即父表具有自然键的一对一关系.很明显,我可能错过了这样一个教程; 如果是这样的话,指点一个也可能就是答案.
而且,就像JPA和我这样的新手一样多次,当一个人需要比最基本的模型更多的时候,人们很快就会碰壁.
因此,考虑以下DB模型:
相应的JPA注释对象模型是什么?(因为我不想影响答案,所以我不遗余力地帮助你们了...)
也欢迎性能建议(例如"一对多可以更快地执行"等)!
谢谢,
使用Django 1.11和postgreSQL数据库(仅从sqlite切换,之前没有此问题)
所以我有3个模型:
models.py
class Person(models.Model):
is_parent = models.BooleanField()
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, OPTIONS???)
class HomeWork(models.Model):
done_by = models.ForeignKey(Person)
content = models.CharField(blablaba)
Run Code Online (Sandbox Code Playgroud)
所以我尝试实施的逻辑是,如果Person.is_parent是True一个VideoGamePurchase实例可以为空或空字段创建after_homework。但是,如果Person.is_parent是False,我希望该字段成为唯一HomeWork对象的主键。
我找不到实现此目的的正确选项:
如果我没有,primary_key=True则迁移失败:
You are trying to add a non-nullable field 'id' to video_game_purchase without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a …Run Code Online (Sandbox Code Playgroud) one-to-one ×10
hibernate ×6
java ×4
django ×3
jpa ×3
postgresql ×3
python ×3
django-admin ×1
insert ×1
many-to-one ×1
natural-key ×1
orm ×1
python-3.x ×1
select ×1
sql ×1