我在尝试用greenDao把一个对象Map到数据库,但是到了数组的时候,我就不知道怎么做了,从网络上接收到JSON,用GSON反序列化之后,我就有了这个类定义的对象:
public class Car {
Long carId;
String name;
ArrayList<String> listOfLinks;
}
在不同架构的情况下,如下所示:
public class Car {
Long carId;
String name;
ArrayList<Link> listOfLinks;
}
public class Link {
Long carId;
String link;
}
----
Entity cars = schema.addEntity("Car");
cars.addLongProperty("carId").primaryKey();
cars.addStringProperty("name");
Entity links = schema.addEntity("Link");
links.addStringProperty("name");
links.addIdProperty().primaryKey().notNull().autoincrement();
Property linkProperty = links.addLongProperty("carId").getProperty();
ToMany carToLinks = cars.addToMany(link, linkProperty);
这很简单。定义一些关系,定义属性,添加外键,然后就完成了。对于数组,我不知道该怎么做。有什么想法吗?
4条答案
按热度按时间0s7z1bwu1#
在使用关系数据库时,这种方法并不常见。通常使用对多关系来实现:您可以创建一个Link实体,然后使用Link列表,而不是使用String列表。
zwghvu4y2#
当你有一个非原始对象的列表时,RelationtoMany是很有用的,你可以声明像实体一样有自己的id等等,等等。并列出实体清单通过这样做greenDao为您的新实体在基表中创建另一个表,该表具有包含list的基实体的外键。当你有一个基本类型的列表时,唯一的方法就是创建一个转换器,把列表转换成greenDao自然工作的基本类型之一。你必须这样做。
现在,在列表中的所有属性之上,您必须放置**@Convert(converter=yourconverterclass.class,columnType = String.class)**
你可以创建转换器作为实体的内部类,在这种情况下,它必须声明为静态,这是我发现的唯一方法,但坏的一面是,你不能使用属性,你正在转换为查询。可能有我一些打字错误,但我希望这有助于解决你的问题
h9a6wy2h3#
我也有同样的问题,并没有答案(不是在官方文档,不是在谷歌)。请解释如何Map列表到实体?
我能做这样的事吗?
ukxgm1gy4#
从JPA 2.0开始,您可以使用元素集合来持久化值类型的集合。您只需要使用@ElementCollection注解该属性,持久性提供程序就会将集合的元素持久化到其他数据库表中。
元素集合似乎比具有一对多关联的实体更容易使用,但它有一个主要缺点:集合中的元素没有id,Hibernate无法单独处理它们。
当您将新Object添加到List或删除现有Object时,Hibernate将删除所有元素并为List中的每个项目插入一条新记录。
下面的代码片段选择了一个Author实体,并将第二个phoneNumber添加到元素集合中。
元素集合是在数据库中存储值类型列表的一个简单但不是最有效的选项。因此,您应该只将它用于非常小的集合,这样Hibernate就不会执行太多的SQL语句。在所有其他情况下,一对多关联是更好的方法。