因为以下Nhibernate问题,我整天都在用桌子敲打桌子.
每个银行帐户都有一组(且只有一组)与之关联的费率.银行帐户表的主键BankAccountID也是外键和AccountRate表中的主键.
public class BankAccount
{
public virtual int BankAccountId { get; set; }
public virtual string AccountName { get; set;}
public virtual AccountRate AccountRate {get;set;}
}
public class AccountRate
{
public virtual int BankAccountId { get; set; }
public virtual decimal Rate1 { get; set; }
public virtual decimal Rate2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我为BankAccount提供了以下HBM映射:
<class name="BankAccount" table="BankAccount">
<id name ="BankAccountId" column="BankAccountId">
<generator class="foreign">
<param name="property">
AccountRate
</param>
</generator>
</id>
<property name ="AccountName" column="AccountName" />
<one-to-one name="AccountRate" class="AccountRate" …Run Code Online (Sandbox Code Playgroud) 我正在努力学习NHibernate 3.2 built-in mapping by code api(不流利的NHibernate).你能帮助我映射这些实体之间的一对一(或零)关系吗?
注意:我搜索了问题,我搜索SOF,所有示例都使用Fluent API或xml; 我正在尝试在NHibernate 3.2中使用内置的映射api
public class Person {
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
// can be null
public virtual Address Address { get; set; }
}
public class Address {
public virtual int Id { get; set; }
public virtual string Line1 { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 根据书籍Pro JPA 2,单向@ManyToOne和@OneToOne之间的主要区别在于@OneToOne:
源实体中只有一个实例可以引用同一个目标实体实例.换句话说,目标实体实例不在源实体实例之间共享.在数据库中,这相当于对源外键列(即源实体表中的外键列)具有唯一性约束.
问题是,当我在实体上创建这样的映射并让Hibernate创建模式时,根本没有创建唯一约束.为什么?因为对我而言,如果必须为映射显式定义唯一约束,则@ManyToOne和@OneToOne之间没有区别.我可以为他们两个做这件事,但没有任何区别.这是正确的行为吗?
在构建迁移时,我收到以下错误:
无法确定由“Location”类型的导航属性“Location.NorthLocation”表示的关系。手动配置关系,或从模型中忽略此属性。
位置实体:
public class Location
{
public Guid Id { get; set; }
public DateTime CreatedWhen { get; set; }
public string CreatedBy { get; set; }
public DateTime ModifiedWhen { get; set; }
public string ModifiedBy { get; set; }
public Guid? NorthLocationId { get; set; }
public virtual Location NorthLocation { get; set; }
public Guid? SouthLocationId { get; set; }
public virtual Location SouthLocation { get; set; }
public Guid? EastLocationId { get; set; }
public …Run Code Online (Sandbox Code Playgroud) entity-relationship entity-framework one-to-one self-referencing-table entity-framework-core
一个雇主有几个雇员,因此雇员与他们的雇主有(多对一)关系。假设我们忽略了从雇主到雇员的反向关系(一对多),那么从雇员的角度来看,这可以表示为一对一的关系!?
我在尝试映射JPA中的一对一关系时得到org.xml.sax.SAXParseException
一切都很好,直到我改变
<transient name="testCase"/>
至:
<attributes>
..
<one-to-one name="testCase">
<join-column name="test_case_id"/>
</one-to-one>
..
</attributes>
Run Code Online (Sandbox Code Playgroud)
给出错误:
引起:org.xml.sax.SAXParseException:cvc-complex-type.2.4.a:找到以元素"一对一"开头的无效内容.其中一个'{"http://java.sun.com/xml/ns/persistence/orm":many-to-many,,http://java.sun.com/xml/ns/persistence/orm":嵌入式,"http://java.sun.com/xml/ns/persistence/orm":transient}"是预期的.
我不明白异常消息的含义.为什么会出现这种情况?
精简版
Hibernate正在执行多个选择查询而不是仅两个以检索一对一关系
长版
人员类:
@Entity
@Table(name = "people")
public class Person{
@Id
@GeneratedValue
@Column
private Integer id;
@Column
private String name;
@OneToOne(optional=false, fetch=FetchType.EAGER)
private Job job;
}
Run Code Online (Sandbox Code Playgroud)
职位类别:
@Entity
@Table(name = "jobs")
public class Job{
@Id
@GeneratedValue
@Column
private Integer id;
@Column
private String name;
}
Run Code Online (Sandbox Code Playgroud)
显示所有人及其工作:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Person> people = session.createQuery("from Person").list();
for(Person p : people){
System.out.println(p.getName() + " | " + p.getJob().getName());
}
Run Code Online (Sandbox Code Playgroud)
我的期望:两个选择,一个为五个人,一个为三个不同的工作(三个人有相同的工作)
我得到了:四个选择,一个用于人,三个用于他们各自的工作
Hibernate: select person0_.id as id1_, person0_.job_id as job3_1_, person0_.name …Run Code Online (Sandbox Code Playgroud) 所以这就是问题所在.我有2个型号:
裁判级别和裁判
这两个是:
class RefereeLevel(models.Model):
level = models.PositiveSmallIntegerField(blank=False,default=1,verbose_name=_("level"),unique=True)
salary = models.DecimalField(blank=False,default=0.00,decimal_places=2,max_digits=4,verbose_name=_("salary"))
def __unicode__(self): # Python 2.7: def __unicode__(self):
return self.level
Run Code Online (Sandbox Code Playgroud)
第二节课:
class Referee(models.Model):
member = models.OneToOneField(Member,related_name='member',blank=False)
information = models.ForeignKey(RefereeLevel,related_name='information',blank=False,null=True,default=1)
Run Code Online (Sandbox Code Playgroud)
现在发生的是,如果我删除了RefereeLevel,那么该级别的裁判将被删除.但我不希望这样,我希望将裁判的信息设置为无.
那可能吗?
谢谢,阿拉
是否有可能/权利在表之间建立只有一种方式的关系?我有一个invoices表,我需要在其他表中引用喜欢commission_payments,membership_payments但invoices表不需要a commission_payment_id或a membership_payment_id.换句话说,可能发生不同类型的交易,并且它们都可能附有发票,但发票不需要引用这些交易表.
invoices commission_payments membership_payments
--------------- --------------------- ---------------------
-id -id -id
... -invoice_id -invoice_id
... ...
Run Code Online (Sandbox Code Playgroud)
我为每个表创建了Eloquent模型.我在其他两个模型上添加了一个hasOne关系invoices.
class CommissionPayment extends Model{
public function invoice(){
return $this->hasOne('App\Models\Invoice');
}
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试访问Comission Payment的附加发票,如下所示:
$com = CommissionPayment::first();
$com->invoice->id;
Run Code Online (Sandbox Code Playgroud)
然后我得到这个错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column
'invoices.commission_payment_id' in 'where clause' (SQL: select * from `invoices`
where `invoices`.`commission_payment_id` = 15 and `invoices`.`commission_payment_id` is not
null limit 1)
Run Code Online (Sandbox Code Playgroud)
为什么要 …
entity-relationship database-relations one-to-one has-one laravel
我有两个模型,视频和帧。
Frame.belongsTo(models.Video);
Video.hasMany(models.Frame, { as: "Frames" });
Run Code Online (Sandbox Code Playgroud)
现在,我需要一种方法来指定视频的第一帧和最后一帧,但无法正常工作。
我尝试了这个:
Video.hasOne(Frame, { as: "FirstFrame" });
Video.hasOne(Frame, { as: "LastFrame" });
Run Code Online (Sandbox Code Playgroud)
但这会在“帧”表而不是“视频”表中创建FirstFrameId和LastFrameId。我需要具有video.get / setFirstFrame()和video.get / setLastFrame()函数。我怎样才能做到这一点?
one-to-one ×10
hibernate ×3
jpa ×3
many-to-one ×2
nhibernate ×2
orm ×2
associations ×1
c# ×1
c#-4.0 ×1
django ×1
has-one ×1
hbm ×1
java ×1
laravel ×1
node.js ×1
sequelize.js ×1
sql ×1