作者回复: 抱歉,这里Keynote的一对多应该是多对多,应该是n而不是1,图上标的不对,我联系极客时间的同学修改下视频中的Keynote。感谢反馈。
作者回复: 多谢分享。
作者回复: 金额不止是一个小数,它还有货币单位之类的东西,复杂的还有货币转换,各种汇率之类的问题。用Money类型可以明确地表示我这个属性是个货币,也更容易区分。
作者回复: 这是Hibernate的注解,可以加在属性上,也可以写在Getter方法上,如果想深入理解可以查阅一下Hibernate的文档。如果我把注解写在Getter方法上,你是否可以理解Getter方法是public的,子类是能继承到的,对于Java POJO而言,getter/setter才是让别人看到属性的地方,而不是内部的field。不知道这么举例说明你能否明白。
作者回复: 就是这么转换的,枚举转成int,一直都这么用,好像我还真没想过为什么
作者回复: JPA是要求实体要有ID的,不过也有绕过的办法,比如用复合主键IdClass,或者参考下这里给出的常见解决方案 https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#No_Primary_Key
作者回复: 简单的东西就用JPA吧。一旦东西复杂了,两者的区别就不大了,而且一般大厂都希望对SQL的控制粒度更细一点,所以都选MyBatis,建议别裸用,结合些工具更好
作者回复: 1. 是用来本地做测试用的,区分环境我们一般都是用Maven和Spring的profile,这个在讲Spring Boot的配置文件时我们会讲到不同profile的配置文件如何使用。 2. 产线都是实现建的,你也可以用一些类似Flyway的工具来帮助进行数据表的维护,但正常情况下这活都是DBA提前搞好的,不会等着让Hibernate在启动时干这些的。 如果是测试,就是想让它建,Hibernate的建表语句是它根据Dialect自己处理的,你不用操心具体的语法。
作者回复: 不是插的时间不对,而是JSON序列化输出时的时区不对,后面的例子里会有指定格式化TimeZone的例子的
作者回复: 抱歉,我是先写的子类,然后抽象上父类的,就全带上了,想都没想这个问题……不过话说回来,一般只有在需要序列化的情况下再去实现这个接口的,我们在写DO的时候其实并不需要序列化,那都是在Facade上或者Web上的。