アプリケーションを AWS と Openshift にデプロイしようとしまし/users
たが、POST 後に GET エンドポイントにアクセスしようとするまで、アプリケーションは正常に動作しているようです (会社データなしで保存されたユーザー)。
戻り値:
予期しないエラーが発生しました (タイプ = 内部サーバー エラー、ステータス = 500)。 ステートメントを準備できませんでした。SQL [company0_.users_id を users_id1_8_0_ として、company0_.companies_id を company2_8_0_ として、company1_.id を id1_0_1_ として、company1_.contact_id を contact_4_0_1_ として、company1_.gallery_id を gallery_5_0_1_ として、company1_.active を active2_0_1_ として、company1_.promoted0_location_id_location_id_を company1_6 として選択します。 、company1_.profile_id を profile_7_0_1_ として、company1_.subscription_id を subscrip8_0_1_ として、contact2_.id を id1_1_2_ として、contact2_.email を email2_1_2_ として、contact2_.phone を phone3_1_2_ として、gallery3_.id を id1_2_3_ として、location4_.id を id1_3_4_ として、location4_.address を address2_3_4_ として、 .city は city3_3_4_、location4_.country は country4_3_4_、location4_.country_code は country_5_3_4_、location4_.latitude は latitude6_3_4_、location4_.longitude は longitud7_3_4_、profile5_.id は id1_5_5_、profile5_ です。
ログは次のとおりです。
org.springframework.dao.InvalidDataAccessResourceUsageException:ステートメントを準備できませんでした
原因: java.sql.SQLSyntaxErrorException: ユーザーに権限がないか、オブジェクトが見つかりません: ステートメント内の COMPANIES
原因: org.hsqldb.HsqlException: ユーザーに権限がないか、オブジェクトが見つかりません: COMPANIES
しかし、これらはすべてmysqlを使用するローカルサーバーで完全に機能します。
コントローラー:
@RestController
public class UserController {
@Autowired
UserRepository repository;
@GetMapping(value = "/users", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity getUsers() {
return new ResponseEntity<>(repository.findAll(), HttpStatus.OK);
}
}
リポジトリ:
@Repository
public interface UserRepository extends JpaRepository<User, String> {
}
ユーザーモデル:
@Entity
@Table(name = "users")
@DynamicUpdate
@EntityListeners(AuditingEntityListener.class)
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
@SerializedName("id")
private long id;
@Column(name = "name")
@SerializedName("name")
private String name;
@Column(name = "email", unique = true, updatable = false)
@SerializedName("email")
private String email;
@Column(name = "password")
@SerializedName("password")
@JsonIgnore
private String password;
@Column(name = "accessToken")
@SerializedName("accessToken")
private String accessToken;
@Column(name = "phoneNumber")
@SerializedName("phoneNumber")
private String phoneNumber;
@Column(name = "createdAt", nullable = false, updatable = false)
@SerializedName("createdAt")
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
private Date createdAt;
@Column(name = "updatedAt", nullable = false)
@SerializedName("updatedAt")
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
private Date updatedAt;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Company> companies;
//getters & setters etc
}
会社のモデル:
@Entity
@Table(name = "companies")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
@SerializedName("id")
private long id;
@OneToOne(cascade = CascadeType.ALL)
@SerializedName("profile")
private Profile profile;
@OneToOne(cascade = CascadeType.ALL)
@SerializedName("contact")
private Contact contact;
@OneToOne(cascade = CascadeType.ALL)
@SerializedName("location")
private Location location;
@OneToOne(cascade = CascadeType.ALL)
@SerializedName("gallery")
private Gallery gallery;
@OneToOne(cascade = CascadeType.ALL)
@SerializedName("subscription")
private Subscription subscription;
@Column(name = "active", columnDefinition = "tinyint(1) default 0")
@SerializedName("active")
private boolean isActive;
@Column(name = "promoted", columnDefinition = "tinyint(1) default 0")
@SerializedName("promoted")
private boolean isPromoted;
//getters & setters etc
}
アプリケーションのプロパティ:
spring.datasource.url=jdbc:mysql://host:3306/database
spring.datasource.username=user
spring.datasource.password=password
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
この問題の原因は何ですか?また、上で述べたように、これはローカル マシンで問題なく動作します。
更新(exp.User/Company、Company/Profile、Company/Contact など) ユーザーを db に保存するときに、リレーション内のすべてのオブジェクトのデータを提供しないと、このエラーが発生するようです。