我创建了一个简单的Web服务器,它使用Hibernate在MySQL数据库上存储实体。此外,正如您所料,它与<...>.shared>
包中的客户端共享一些库以访问各种资源。其中,有POJO类,注释了Hibernate和Jackson注释。这是POJO类的一个例子。
@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "user", uniqueConstraints =
{ @UniqueConstraint(columnNames = "email"),
@UniqueConstraint(columnNames = "nick") })
public class User implements java.io.Serializable, RecognizedServerEntities
{
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer userId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "threadAuthor",
orphanRemoval = false)
@Cascade({ CascadeType.SAVE_UPDATE })
private Set<Thread> userThreads = new HashSet<Thread>(0);
}
现在,我正在尝试创建一个只使用这些共享类的Android应用程序:该应用程序不需要了解有关Hibernate,Javax.persistence甚至Jackson注释的任何信息。 但是,当我创建一个新的Android项目时,它需要很多库。
74K hibernate-commons-annotations-4.0.5.Final.jar
5,1M hibernate-core-4.3.6.Final.jar
38K jackson-annotations-2.4.0.jar
221K jackson-core-2.4.3.jar
1,1M jackson-databind-2.4.3.jar
180K javax.persistence_2.1.0.v201304241213.jar
714K org.restlet.jar
55K shared.jar
问题是他们大大放大了应用程序的大小并减慢了开发过程,因为我必须启用Multidex支持。 那么,我该如何解决? 我可以想到一些解决方案:
编辑:我部分地解决了从hibernate-core-4.3.6.Final.jar
中提取所需的casses的问题,这是最好的库。仍在寻找最优雅的解决方案。
答案 0 :(得分:1)
如果您认为您的应用程序具有图层,那么您目前在数据访问和视图图层中使用相同的类。
您的数据库对Jackson注释并不感兴趣,您的Android客户端对Hibernate注释并不感兴趣。
我见过的两种不同方法是: - 有一个平行的观点&#39;具有Jackson注释的对象的图层表示,您的应用程序将通过从Hibernate带注释的数据访问层进行映射来填充该注释 要么 - 让您的客户端应用程序不共享服务器应用程序的类。它解析JSON并将结构映射到您自己的客户端特定模型。
这些方法是等效的,但只是根据映射的位置而变化。