Django灯具的自然键出现反序列化错误
我已经看到了一些类似的问题,但是似乎没有一个回答我的特定问题.我是Django的新手,并在class GraphTypeManager(models.Manager): def get_by_natural_key(self, type): return self.get(type=type) class GraphType(models.Model): type = models.CharField(max_length=100, unique=True) class GraphManager(models.Manager): def get_by_natural_key(self, name): return self.get(name=name) class Graph(models.Model): name = models.CharField(max_length=200, unique=True) type = models.ForeignKey(GraphType) cla
4 2023-12-25
编程技术问答社区
关系数据库的设计问题-代用钥匙还是自然钥匙?
哪一种是最佳实践,为什么? a)类型表,替代/人工钥匙 外键从user.type到type.id: b)类型表,天然键 外键从user.type到type.typeName: 解决方案 我相信,实际上,使用自然键很少是最好的选择.我可能会选择 sermogate key 在第一个示例中使用. 以下是自然关键方法的主要缺点: 您可能的类型名称可能不正确,或者您可能只想重命名类型.要编辑它,您必须更新所有将其用作外键的表. int字段上的索引将比varchar字段上的索引紧凑得多. 在某些情况下,可能很难拥有 unique uniquer 自然钥匙这是必要的,因为它将用作主要键.这可能不适用于您的情况. 其他解决方案 第一个是将来的证据,因为它允许您更改代表类型的字符串,而无需更新整个用户表.换句话说,您使用 sermogate key ,为灵活性而引入的其他不可变的标识符./p> 其他解决方案 使用替代键(而不是像名称一样
22 2023-09-15
编程技术问答社区
使用Hibernate的@NaturalId查找实体有什么好处?
使用Hibernate的@NaturalId找到一个对象是否有任何优势? 我担心Hibernate执行两个查询以使用@NaturalId获取对象的事实. 第一个查询只是获取ID和第二个查询以加载真实对象. 解决方案 主要优点是您可以使用缓存解决实体而无需击中数据库. 当投掷事件,Hibernate将尝试: 从第一级缓存加载关联的实体ID 从第二级缓存加载关联的实体ID(如果启用) 如果第一个级别的缓存无法满足我们的请求 ,请查询数据库查询 Serializable entityId = resolveFromCache( event ); if ( entityId != null ) { if ( traceEnabled ) LOG.tracev( "Resolved object in cache: {0}", MessageHelper.infoString( p
8 2023-05-14
编程技术问答社区
什么是Hibernate中的自然标识符?
在阅读冬眠文档时,我不断看到对天然标识符概念的引用. 这仅意味着一个实体所拥有的ID具有其保留的数据的性质? 例如.用户的名称 +密码 +年龄 +用作复合标识符? 解决方案 在休眠中,天然钥匙通常用于查找.在大多数情况下,您将拥有自动生成的替代ID.但是,此ID对于查找而言是没有用的,因为您总是会按名称,社会保险号或现实世界中的其他任何字段查询. 使用Hibernate的缓存功能时,此差异非常重要:如果您的主键(代理ID)索引缓存,则查找中不会有任何性能增长.这就是为什么您可以定义要使用自然ID查询数据库的一组字段.然后,Hibernate可以通过您的天然密钥索引数据并改善查找性能. 请参阅此出色的博客文章详细说明或此 redhat页面示例Hibernate映射文件. 其他解决方案 在关系数据库系统中,通常可以有两种类型的简单标识符: 天然密钥,由外部系统分配并保证是唯一的 替代密钥,例如IDENTITY或SEQUENCE,由数据库分配.
46 2023-05-14
编程技术问答社区
Hibernate:将引用映射到子表的可选/自然键列时出现错误?
最初的问题源于这个问题: 为什么此JPA 2.0映射给我Eclipse/Jboss工具中的错误? 您可以看到这个星座也吓坏了Eclipse Dali JPA验证器. JPA规格似乎允许此处看到(有些可靠): 是否可以进行JPA规范允许引用非主要钥匙列? 第一个问题中发布的确切代码还提出了冬眠的mappingException: Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: geoareas] Unable to configure EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:374) at org.hibernate.ejb.HibernatePersistence.createE
10 2023-03-18
编程技术问答社区
使用Hibernate'的@NaturalId查找对象的优势
使用 Hibernate 的 @NaturalId 查找对象有什么好处吗? 我担心 Hibernate 执行两个查询以使用 @NaturalId 获取对象.第一个查询只是为了获取 id,第二个查询是为了加载真实的对象. 提前致谢. 解决方案 正如我在 这篇文章,主要优点是可以使用Cache来解析实体而不打数据库. 当 ResolveNaturalIdEvent 事件被抛出,Hibernate 将尝试: 从一级缓存中加载关联的实体 id 从二级缓存加载关联的实体 ID(如果启用) 如果一级缓存不能满足我们的请求,则回退到数据库查询 Serializable entityId = resolveFromCache( event ); if ( entityId != null ) { if ( traceEnabled ) LOG.tracev( "Resolved object in cache: {0}",
1486 2022-07-17
编程技术问答社区