当前位置: 首页 > 面试题库 >

复合主键领域/交换

龚志
2023-03-14
问题内容

我是快速入门的新手。我想做一个复合主键,当我尝试这样的事情时:

class DbLocation : Object {
 dynamic var id = 0
 dynamic var tourId = 0

 dynamic var uuid : String  {
    return "\(id)\(tourId)"
 }

 override static func primaryKey() -> String? {
    return "uuid"
 }
}

我收到此错误:对象’DbLocation’上不存在’主键属性’uuid’

任何人都可以通过示例为我提供帮助,该示例如何创建复合主键?


问题答案:

对于1.0.1+领域:

class DbLocation: Object{
    dynamic var id = 0
    dynamic var tourId = 0
    dynamic var compoundKey = ""

    override static func primaryKey() -> String? {
        return "compoundKey"
    }

    func setup(id: Int, tourId: Int){
        self.id = id
        self.tourId = tourId
        self.compoundKey = compoundKeyValue()
    }

    func compoundKeyValue() -> String {
        return "\(id)\(tourId)"
    }
}

用法示例:

let location = DbLocation()
location.setup(id: 0, tourId: 1) 
print(location.compoundKey) // "01"

当然,你可以玩弄各种使用didSet上的听众idtourId,以确保compoundKey才能正确重写每一个值换衣服的时间。

对于pre-1.0.1领域:

class DbLocation: Object {
    dynamic var id = 0
    dynamic var tourId = 0

    func setCompoundID(id: Int) {
        self.id = id
        compoundKey = compoundKeyValue()
    }

    func setCompoundTourId(tourId: Int) {
        self.tourId = tourId
        compoundKey = compoundKeyValue()
    }

    dynamic lazy var compoundKey: String = self.compoundKeyValue()

    override static func primaryKey() -> String? {
        return "compoundKey"
    }

    func compoundKeyValue() -> String {
        return "\(id)\(tourId)"
    }
}

自定义设置器确保compoundKey始终处于更新状态,惰性关键字确保您第一次访问它时,它将从您已设置的内容中派生。

在此问题进行了辩论的线程中查找有关此主题的更多信息。



 类似资料:
  • 问题内容: 我正在设计一个数据库,该数据库将用于存储来自许多不同来源的数据。我存储的实例由原始来源分配了唯一的ID。我存储的每个实例都应包含有关其来源的信息,以及与此来源相关联的ID。 作为示例,请考虑说明该问题的下表: 请注意,尽管每个来源的唯一,但有可能在不同来源中找到相同的来源。 我对关系数据库有一个不错的了解,但是与专家甚至是经验丰富的用户都相去甚远。我在此设计中面临的问题是应该用作主键。

  • 问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域

  • 我在使用复合主键的hibernate实体集时遇到了问题。 我们的应用程序中有一个概念“Target”。目标id应该是其他三个表(实体)主id的组合。目标也有一个int标记。员工应该有一系列目标。SQL如下所示: 这个SQL工作正常,它允许我每个role_id(员工)多个目标,只要应用程序和项目分类不同。 这是目标ID类 这是目标类 这是employee类,我想在其中为每个员工存储一组目标。 通过h

  • JFinal ActiveRecord 从 2.0 版本开始,采用极简设计支持复合主键,对于 Model 来说需要在映射时指定复合主键名称,以下是具体例子: ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin); // 多数据源的配置仅仅是如下第二个参数指定一次复合主键名称 arp.addMapping("user_role",

  • 我使用以下架构,Realm定义了一个拥有收藏歌曲列表的用户: 我的应用程序模型基本上反映了服务器模型。因此,当我收到新的FavoriteSong时,我想将其保存到领域: 这失败了,因为FavoriteSong中包含的Song已经存在于域中,违反了主键约束。 一种解决方案是将收藏夹歌曲标签设置为主键: 然后使用CopToRealmOrUpdate()而不是CopToRealm(),它在插入之前检查所